0

我有一个 Azure 表,其中存储了 1000 个按代码的第一个字母划分的折扣代码,因此大约有 30 个分区,每个分区有 1000 条记录。在我的应用程序中,我输入代码并从表中获取特定记录。然后我更新折扣代码以说明它已被使用。在对 1000 个并发用户进行 30 秒的负载测试时,读取代码的响应时间不到 1 秒,但更新记录的时间超过 10 秒。这是表存储的典型行为还是有办法加快速度?

//update discount code

string code = "A0099"; 

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("constring...");

CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

CloudTable table = tableClient.GetTableReference("discounts");            

string partitionKey = code[0].ToString().ToUpper();

TableOperation retrieveOperation = TableOperation.Retrieve<DiscountEntity>(partitionKey, code);

TableResult retrievedResult = table.Execute(retrieveOperation);

if (retrievedResult.Result != null) {

    DiscountEntity discount = (DiscountEntity)retrievedResult.Result;

    discount.Used = true;

    TableOperation updateOperation = TableOperation.Replace(discount);

    table.Execute(updateOperation);

}
4

2 回答 2

0

这不是默认行为,但我以前见过...首先检查您的 vm 大小,因为 vm 大小越大,I/O 越快(某处有一个 MS 文档说胖虚拟机“快I / O”或类似的东西......)但即使对于超小型虚拟机来说10秒也很多......

为了加快速度,我建议您:

  • 实现缓存!,而不是一次搜索1个代码,一次捕获未使用代码的整个“字母”,将它们缓存起来,然后在缓存中搜索要更新的人
  • 不要实时更新,而是更新缓存,然后使用异步方法将内容保存回来
于 2013-10-25T10:10:03.370 回答
0

您可以检查的一件事是特定请求的 E2E 时间与服务器处理请求所花费的时间。这将允许您查看瓶颈是客户端/网络还是服务器。

有关启用 Windows Azure 存储分析(特别是日志记录)的更多信息,请参阅如何监控存储帐户存储分析文章。

于 2013-10-29T06:33:07.563 回答