2013-10-25 38 views
0

我有一个Azure表,其中存储1000代码的第一个字母分区的折扣代码,所以大约有30个分区,每个1000个记录。在我的应用程序中,我输入代码并从表中获取特定记录。然后我更新折扣代码,说它已被使用。当使用1000个并发用户加载测试此应用程序30秒时,读取代码的响应时间少于1秒,但更新记录需要10秒以上。这是表格存储的典型行为,还是有办法加速这个过程?Azure表存储缓慢更新记录

//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); 

} 
+0

这可能有所帮助:http://stackoverflow.com/questions/12750302/how-to-achive-more-10-inserts-per-second-with-azure-storage-tables/12750535#12750535。 –

回答

0

这是不是默认的行为,但我已经看到过...首先是检查你的虚拟机的大小,因为更大的VM大小,更快的I/O(那里有一个MS文档的地方,说胖胖的虚拟机有“快速I/O”或类似的东西......)但10秒很多,即使是超小型虚拟现实...

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

  • 实现缓存!,而不是在时间搜索1码,捕获的未使用的代码整个“信”的同时,缓存起来,然后搜索缓存为家伙更新
  • 不要实时更新,而是更新缓存,比使用异步的方式来保存的东西回
+0

感谢您的回复。关于缓存代码的好主意,我会研究一下。我有一个类似的问题更新SQL Server中的会话变量。我正在使用2核和3.5GB RAM的中型VM,但尝试过更大的VM。我想知道瓶颈是否在我的建筑中的其他地方。 – markvpc

+0

@ CL4NCY如果从你的服务器到你的sql服务器实例的延迟很大,那可能是......也检查web服务调用......还要检查存储是否在同一个数据中心/区域 – Leonardo

0

一两件事你可以检查是不是E2E时间特定请求VS多少时间服务器已经处理了请求。这将允许您查看瓶颈是客户端/网络还是服务器。

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