如何以除使用Key之外的其他方式查找有状态服务上的数据

时间:2016-10-06 11:04:10

标签: azure azure-service-fabric

我已经阅读了所有可以找到的Azure Service Fabric文章,但我仍然无法理解您如何使用存储在Stateful Services中的数据 - 除了通过提取他们靠钥匙。

E.g。假设我有一个Team和一个Player对象。它们存储在IReliableDictionaries中,密钥为team-1team-2player-1player-2等。

每个Player对象都有一个Player.team值,该值是对Team的引用。

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

1 个答案:

答案 0 :(得分:2)

您可以使用CreateEnumerableAsyncGetAsyncEnumerator循环访问数据。小心使用,如果字典很大,这可能需要一些时间。并且它不是搜索集合的有效方式。 (反对使用密钥)

您还可以存储从玩家到团队以及从团队到玩家的参考。修改Transaction内的ReliableDictionaries以使其保持同步。通过这种方式,您可以在没有循环的情况下为团队找到球员和球员的球队。确保您的State对象保持不变,如链接文章中所示。

您还可以保留第三个字典,其中包含Team和Player对象之间的所有引用,因此如果您有许多引用,则不要过多地混淆对象模型。

最后,如果需要查询大量关系数据,可以使用SQL Server等外部存储。