如何以除使用 Key 之外的其他方式在 Stateful Services 上查找数据

How to lookup data on Stateful Services in other ways than using Key

我已经阅读了我能找到的所有 Azure Service Fabric 文章,但我仍然无法理解您应该如何处理存储在有状态服务中的数据——除了通过按键获取它们。

例如假设我有一个 Team 和一个 Player 对象。它们存储在 IReliableDictionaries 中,键为 team-1team-2player-1player-2

每个 Player 对象都有一个 Player.team 值,它是对 Team.

的引用

现在...假设我想要获取所有 PlayerPlayer.team 等于 team-2 的对象。我该怎么做呢?我是否必须手动遍历所有对象并自己找到所有对象?取数据的时候不是应该有过滤功能吗?

您可以使用 CreateEnumerableAsyncGetAsyncEnumerator 遍历数据。请小心使用,如果您的字典很大,这可能需要一些时间。而且这不是搜索集合的有效方法。 (反对使用密钥)

您还可以存储从玩家到团队以及从团队到玩家的引用。修改 Transaction 中的两个 ReliableDictionaries 以使它们保持同步。这样您就可以在不循环的情况下找到一个球员的球队和一个球队的球员。确保您的 State 对象保持不变,如链接文章中所示。

您还可以保留第三个字典,其中包含 Team 和 Player 对象之间的所有引用,这样如果您有很多引用,您的对象模型就不会太混乱。

最后,如果您需要查询大量关系数据,您可以使用像 SQL 服务器这样的外部存储。