Azure Service Fabric中查询数据的最佳方式是什么?

5
什么是在Azure Service Fabric中查询数据的最佳方法?是否有基于Reliable Dictionary之上的东西?例如:map/reduce?
示例:客户对象存储在一个可靠的集合中。键是CustomerID。现在我想找到所有姓氏以“A”开头的来自“悉尼”的客户,并且在上个月内订购了某些东西。
在Azure Service Fabric中实现这个查询功能的最佳方法是什么?性能会如何?假设列表中有几十万个客户。
1个回答

5

可靠的集合是IEnumerable(或支持创建枚举器),类似于单机.NET集合,这意味着您可以使用LINQ查询它们。例如:

IReliableDictionary<int, Customer> myDictionary =
   await this.StateManager.GetOrAddAsync<IReliableDictionary<int, Customer>>("mydictionary");

return from item in myDictionary
       where item.Value.Name.StartsWith("A")
       orderby item.Key
       select new ResultView(...);

性能取决于您要执行的查询类型,但可靠集合的主要优点之一是它们对执行查询的代码是本地的,这意味着您直接从内存中读取而不是向外部存储发出网络请求。
对于非常大的数据集,您最终会将包含字典的服务进行分区(这是Service Fabric中的内置功能)。在这种情况下,您将在每个分区中具有相同的查询,但随后需要聚合结果。通常在这种情况下,最好设置另一个字典,可以作为常见查询的索引。

"index for common queries" 是什么意思?能否举个简单的例子来解释一下? - CPA
@CPA - 我认为他的意思是拥有另一个IReliableDictionary,其中包含特定查询的查找键/值。 - Ryan
IReliableDictionary 不再实现 IEnumerable 接口,因此该方法不再可用。相反,您可以使用 CreateEnumerableAsync 方法,并可能编写一个包装器使其类似于 IEnumerable,就像这个答案中所述。 - cassandrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接