gpt4 book ai didi

azure - 不支持使用 TableBatchOperation 检索多行?

转载 作者:行者123 更新时间:2023-12-04 02:05:35 26 4
gpt4 key购买 nike

下面是一段初始化 TableBatchOperation 的代码,旨在在单个批处理中检索两行:

 TableBatchOperation batch = new TableBatchOperation();
batch.Add(TableOperation.Retrieve("somePartition", "rowKey1"));
batch.Add(TableOperation.Retrieve("somePartition", "rowKey2"));
//second call throws an ArgumentException:
//"A batch transaction with a retrieve operation cannot contain
//any other operation"

如上所述,抛出了异常,并且似乎不支持在单个批处理中检索 N 行。这对我来说很重要,因为我需要为每个请求检索大约 50 行。 这个问题既涉及性能方面,也涉及成本方面。如您所知,Azure 表存储定价基于事务量,这意味着 50 个检索操作比单个批处理贵 50 倍操作。

我错过了什么吗?

旁注我正在使用新的 Azure 存储 api 2.0。我注意到这个问题从未在网络上提出过。此限制可能是最近添加的?

编辑

我在这里找到了一个相关问题:Very Slow on Azure Table Storage Query on PartitionKey/RowKey List 。似乎在行键上使用带有“或”的 TableQuery 将导致全表扫描。这里确实有一个严重的问题......

最佳答案

在 Azure 表存储 (ATS) 中设计分区键 (PK) 和行键 (RK) 方案时,您的主要考虑因素应该是如何检索数据。正如您所说,您运行的每个查询都会花费金钱,但更重要的是时间,因此您需要在一个有效的查询中获取所有数据。您可以在 ATS 上运行的高效查询有以下类型:

  • 精确的 PK 和 RK
  • 精确的 PK、RK 范围
  • PK范围
  • PK范围、RK范围

根据您的评论,我猜您已经获得了一些与此类似的数据:

PK    RK     Data
Guid1 A {Data:{...}, RelatedRows: [{PK:"Guid2", RK:"B"}, {PK:"Guid3", RK:"C"}]}
Guid2 B {Data:{...}, RelatedRows: [{PK:"Guid1", RK:"A"}]
Guid3 C {Data:{...}, RelatedRows: [{PK:"Guid1", RK:"A"}];}

您已经在 Guid1 检索了数据,现在您需要加载 Guid2 和 Guid3。我还假设这些行没有共同点,就像它们都针对同一用户一样。考虑到这一点,我将创建一个额外的“索引表”,如下所示:

PK      RK      Data
Guid1-A Guid2-B {Data:{....}}
Guid1-A Guid3-C {Data:{....}}
Guid2-B Guid1-A {Data:{....}}
Guid2-B Guid1-A {Data:{....}}

其中 PK 是父行的 PK 和 RK 的组合,RK 是子行的 PK 和 RK 的组合。然后,您可以运行一个查询,该查询显示返回 PK="Guid1-A"的所有行,您只需一次调用(或总共两次调用)即可获得所有相关数据。这产生的最大开销是在您的写入中,因此现在当您右击一行时,您还必须为每个相关行写入行,并确保数据保持最新(这可能不是问题)对于您来说,如果这是一次写入的场景)。

如果我的任何假设是错误的,或者如果您有一些示例数据,我可以用更相关的示例更新此答案。

关于azure - 不支持使用 TableBatchOperation 检索多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179269/

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