我正在尝试在较小的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) 秒(完成处理或返回延续)
没有对快速/低响应时间的承诺。也没有任何关于使用较小表的速度更快的承诺。