【问题标题】:Azure Table Storage slow to update recordsAzure 表存储更新记录缓慢
【发布时间】:2013-10-25 09:40:13
【问题描述】:

我有一个 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);

}

【问题讨论】:

标签: azure azure-table-storage


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复。关于缓存代码的好主意,我会研究一下。我在 SQL Server 中更新会话变量时遇到了类似的问题。我正在使用具有 2 个内核和 3.5GB RAM 的中型 VM,但尝试过更大的 VM。我想知道瓶颈是否在我的架构中的其他地方。
  • @CL4NCY 如果从您的服务器到您的 sql server 实例的延迟很大,可能是这样...还要检查 Web 服务调用...还要检查存储是否在同一个数据中心/地区
【解决方案2】:

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

有关启用 Windows Azure 存储分析(特别是日志记录)的更多信息,请参阅 How To Monitor a Storage AccountStorage Analytics 文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2012-12-21
    • 1970-01-01
    • 2017-03-06
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多