我的表存储大约有1-2百万条记录,我的日常工作需要检索没有属性A的所有记录并进行一些进一步处理。
[据估计,大约有1-150万条没有财产A的记录。我知道有两种方法。
当前,它使用的方法是查询所有记录并使用c#进行过滤。但是,该任务正在Azure功能应用程序中运行。检索所有结果的查询有时需要10分钟以上,这是Azure Functions的限制。
我试图理解为什么检索一百万条记录花费的时间如此长,以及如何优化查询。该表的现有设计是,分区和行键是相同的,并且是一个向导-这使我相信每个分区都有一个实体。
查看Microsoft文档,这是一些关键的表存储限制(https://docs.microsoft.com/en-us/azure/storage/common/storage-scalability-targets#azure-table-storage-scale-targets):
我最初的猜测是,我应该使用另一个分区密钥将每个分区2,000个实体分组,以实现每个分区每秒2,000个目标吞吐量。从理论上讲,这是否意味着1秒钟内可以返回2,000,000条记录?
任何想法或建议都会受到赞赏。
我发现有两种方法可以在批处理中检索1个以上的记录,其中必须将结果保存到单个介质(例如文件)中。
第一]您标识/选择相关数据的所有主要ID /密钥。然后,使用这些主要ID /键的块生成并行作业,在其中读取实际数据并进行处理。然后将每个作业的结果报告给单一媒体。
第二个]您标识/选择(更新)相关数据的前n个,并将该数据标记为正在处理的状态。在此使用并发锁定,如果并行完成,应该可以防止其他人拾取该数据。
如果可能,我将寻求第一个解决方案,因为它是最简单,最干净的解决方案。如果您使用“选择更新”,则第二种解决方案是最好的,我不知道Azure表存储是否支持该选择。
您需要对任务进行校验。如您所不知道的分区键,请运行24个独立的查询PK,分别针对字母表字母的每个字母开始和结束。编写一个查询,其中PK> A && PK B