c# - 提高此 Azure 表行计数查询的性能

标签 c# .net azure azure-storage azure-table-storage

我在 Azure 表上有以下查询:

var count = table.ExecuteQuery(new TableQuery<MessageEntity>()).Count();

这是MessageEntity:

public class MessageEntity : TableEntity
{
    public MessageEntity() { }

    public string Message { get; set; }
}

这个查询真的很慢。在我的开发机器上统计总共 85,000 条记录大约需要 15 秒。我正在使用Azure Storage Emulator使用 UseDevelopmentStorage=true 作为我的连接字符串。我能做些什么来提高它的性能?我想做的就是计算记录数,肯定有更快的方法吗?

最佳答案

以下是如何在不检索实体的情况下获取 Azure 表中单个分区的实体计数的方法。对于每个分区,创建一个附加实体,我们将其称为行计数实体,具有相同的分区键但行键不变(即“rowcountRK”)。行计数实体将具有单个长类型属性,即。 “rowCount”将保留该分区的行数。

每次将实体插入到该分区时,也会增加该分区的行计数实体的 rowCount 属性。您可以通过批处理操作来完成此操作。 Azure表批处理操作在同一分区内是原子的,因此不会出现任何不一致。同样,每次从分区中删除实体时,您还会减少行计数实体的 rowCount 属性,并再次将批处理操作中的这些操作发送到 Azure 表存储,以实现一致性和原子性。

现在,如果您想查询单个分区中的行数,您所需要做的就是查询该分区的行计数实体,无需检索/扫描任何其他内容。如果你想获取整个表的总行数,假设你的表中有多个分区,那么你需要查询表中的所有行计数实体,并在客户端将它们的行计数属性值相加边。这将导致表扫描,但有效负载会更小,它可能也比扫描整个表更快。或者,如果您知道分区键,那么您可以对每个分区的行计数实体进行并发点查询并将它们相加,这很可能比整个表扫描更有效。

关于c# - 提高此 Azure 表行计数查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40363502/

相关文章:

c# - MvvmCross Xamarin Android 在带有链接的启动画面上挂起

c# - 软件包需要 NuGet 客户端版本...或更高版本

c# - 将由特定于文化的数字组成的 Unicode 字符串转换为整数值

azure - 如何从 Nodejs 堆栈上的 Azure Function App 中的 Azure key 保管库中提取 key

C# 上传前过滤文件扩展名

C#- 将形状移动到距窗体顶部一半的位置

时间:2019-03-17 标签:c#Moq一个带有可选参数的方法

c# - 在 .NET 中使用 TPL

azure - 如何通过 Azure Logic App 和 Outlook 发送 html 电子邮件

azure - 从 Azure Apim 中的上下文读取命名值