对小型表执行缓慢的 Azure 表搜索和插入操作



我正在尝试在较小的ATS上对搜索/读取和插入查询进行基准测试(500个实体)。平均插入时间为 400 毫秒,平均搜索 + 检索时间为 190 毫秒。

插入时,我正在查询分区键,条件本身仅由一个谓词组成:[分区键] eq <value>(不再有 ands/ors)。另外,我只返回 1 个属性。

造成这种结果的原因可能是什么?

搜索代码:

TableQuery<DynamicTableEntity> projectionQuery = new TableQuery<DynamicTableEntity>().Select(new string[] { "State" });
        projectionQuery.Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "" + msg.PartitionKey));
        // Define an entity resolver to work with the entity after retrieval.
        EntityResolver<bool?> resolver = (pk, rk, ts, props, etag) => props.ContainsKey("State") ? (props["State"].BooleanValue) : null;
        Stopwatch sw = new Stopwatch();
        sw.Start();
        List<bool?> sList = table.ExecuteQuery(projectionQuery, resolver, null, null).ToList();
        sw.Stop();

插入代码:

CloudTable table = tableClient.GetTableReference("Messages");
        TableOperation insertOperation = TableOperation.Insert(msg);
        Stopwatch sw = new Stopwatch();
        // Execute the insert operation.
        sw.Start();
        table.Execute(insertOperation);
        sw.Stop();

可以参考这篇文章了解可能的性能问题:Microsoft Azure 存储性能和可伸缩性清单。

只能获得一个属性的原因是您使用的是实体解析程序,请尝试将其删除。请参阅 Windows Azure Storage Client Library 2.0 Tables Deep Dive 以了解 EntityResolver 的用法 - 何时应该使用它以及如何正确使用它。

来自 SLA 文档:

存储

我们保证至少在99.99%的时间内,我们将成功 处理从读取访问异地冗余存储读取数据的请求 (RA-GRS)帐户,前提是尝试从 在次要区域上重试主要区域。

  • 我们保证至少在 99.9% 的时间内,我们将成功处理从本地冗余存储 (LRS) 读取数据的请求, 区域冗余存储 (ZRS) 和异地冗余存储 (GRS) 帐户。

  • 我们保证至少在 99.9% 的时间内,我们将成功处理将数据写入本地冗余存储 (LRS) 的请求, 区域冗余存储 (ZRS) 和异地冗余存储 (GRS) 帐户 和读取访问异地冗余存储 (RA-GRS) 帐户。

并且还从那里参考文件:

表查询/列表操作
最长处理时间:十 (10) 秒(完成处理或返回延续)

没有对快速/低响应时间的承诺。也没有任何关于使用较小表的速度更快的承诺。

相关内容

  • 没有找到相关文章

最新更新