gpt4 book ai didi

azure - Service Fabric Reliable Collections 中是否存在既定的分页模式

转载 作者:行者123 更新时间:2023-12-01 00:36:15 27 4
gpt4 key购买 nike

在可靠集合(特别是 IReliableDictionary)中,实现“常见”查询的方法是更新辅助字典,该字典构造要在枚举中以特定方式排序的键。对于大型数据集,我希望避免传输大量数据

为了实现这一目标,我想实现某种延续 token ,调用者可以在请求数据时向我提供该延续 token 。我目前正在通过首先生成有序枚举并返回前 n 个项目来实现此目的,其中 n = MAX_PAGE 大小。 延续本质上是 n 个项目列表中的最后一个键。下次调用者传入延续标记时,我使用过滤器函数生成有序枚举,指定键应大于延续

这有两个问题(我可以看到):

  1. 在调用者首次请求页面和后续请求之间,集合可能会发生变化。我不确定是否可以避免这种情况,因为无论谁尝试对数据进行分页,都需要能够随时对集合进行更新。
  2. 我不确定过滤功能是如何使用的。我假设由于开发人员可以过滤任何内容,因此 GetEnumerableAsync() 方法必须在返回可枚举之前提供字典中的所有键。对于足够大的数据集,这似乎很慢。

是否有任何规定的方法来对这样的数据进行分页?我开始觉得对于我的一些用例来说,我可能会用 Reliable Collections 找错树。

最佳答案

构建二级索引的一种方法是使用 Notifications 。使用具有引用类型 TKey 和 TValue 的通知,您可以维护二级索引,而无需创建 TKey 或 TValue 的任何副本。

如果需要二级索引提供快照隔离,那么为二级索引选择的数据结构必须实现多版本并发控制。

如果您没有这样的数据结构来托管二级索引,另一个选择是在分页客户端调用中保持事务和枚举处于事件状态。这样,您就可以使用 Reliable Dictionary 的内置快照支持来提供对数据的分页一致扫描,而不会阻止写入。在这种情况下, token 将是 TransactionId允许您的服务找到 MoveNextAsync 的相关枚举在。使用此选项的缺点是,Reliable Dictionary 将无法删除可能长时间运行的快照事务保持可见的旧版本值。

为了减轻上述缺点,您可能希望限制正在进行的快照事务的数量以及在您的服务处理枚举和相关读取事务之前客户端必须完成分页枚举的时间。

何时 CreateEnumerableAsync如果使用键过滤器,Reliable Dictionary 将为每个键调用过滤器以查看它是否满足自定义过滤器。由于如今 TKey 始终保存在内存中,因此对于大多数关键过滤器,我们在这里没有看到问题。枚举中最昂贵的部分往往是从磁盘检索调出的值。

关于azure - Service Fabric Reliable Collections 中是否存在既定的分页模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41008507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com