gpt4 book ai didi

java - Azure 存储 TableQuery 结果到 ArrayList 性能 (Java)

转载 作者:行者123 更新时间:2023-12-01 20:54:46 25 4
gpt4 key购买 nike

我需要从 Azure 存储表中检索 50.000 个实体,结果应放入列表中。检索实体并不需要太多时间,但将它们从 Iterable 放入 List 需要相对较长的时间,大约 10 秒。我怎样才能在更短的时间内做到这一点?

以下代码检索条目并将它们放入 ArrayList 中:

Iterable<T> items = table.execute(tableQuery);

ArrayList<T> result = new ArrayList<T>();
if (items != null) {
for (T item : items) {
result.add(item.getContents());
}
}

一次仅检索 1000 个条目,但根据我的理解,Iteratable 会自动处理此问题。这似乎也是耗时的部分,每次都要获取接下来的 1000 个条目。

我还尝试使用 executeSegmentedResultContinuation token :

ArrayList<T> result = new ArrayList<T>();
ResultContinuation token = null;

do {
ResultSegment<T> segment = table.executeSegmented(tableQuery, token);
result.addAll(segment.getResults());
token = segment.getContinuationToken();
} while (token != null);

这里executeSegmented需要很多时间。

所以这些选项都很慢。如何获得更高的性能来更快地创建此List

编辑

查询如下:

TableQuery<T> tableQuery = TableQuery.from(classAzure).where(TableQuery.generateFilterCondition("MerchantId", QueryComparisons.EQUAL, merchantId));

最佳答案

这里发生了两件事:

  1. 查询未优化:我注意到您正在查询名为 MerchantId 的属性。由于您的查询中不包含 PartitionKey,Azure 表服务正在进行全表扫描,即它从第一个分区开始,找到与您的查询匹配的数据,然后转到下一个分区,很快。根据表中实体的数量,这会导致查询执行速度变慢。

Azure 存储团队发布了有关表设计的优秀指南。我强烈建议您阅读它。您可以在这里找到本指南:https://learn.microsoft.com/en-us/azure/storage/storage-table-design-guide .

  • 惰性迭代器:我已经很久没有使用Java了,所以我在这里可能是错的。但在 C# 中,当你执行这行代码时:

    可迭代项 = table.execute(tableQuery);

  • 查询未执行。仅当您实际迭代查询时才会执行查询。

    对于缓慢的情况,我建议再次查看查询,看看是否可以在查询中包含 PartitionKey。您还可以通过 Fiddler 等工具跟踪请求,并注意向 Azure 表服务发出了多少请求。

    关于java - Azure 存储 TableQuery 结果到 ArrayList 性能 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42534897/

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