2016-08-03 68 views
0

我想在行中存储一个值:guid。但我必须设置Pair:PartitionKey和RowKey,所以我的配对是: “guidValue”,some_guid 什么应该是PartitionKey:guid或const字符串?Azure Table:在Azure表中存储guid的最佳性能是什么?

所以结构应该看起来像这样:

PartitionKey: "guidValue" 
RowKey: 951FE9AE-50FA-48F6-96C8-81D10271E36D 

PartitionKey: "guidValue" 
RowKey: 951FE9AE-50FA-48F6-96C8-81D10271E37D 

PartitionKey: "guidValue" 
RowKey: 951FE9AE-50FA-48F6-96C8-81D10271E38D 

...

或类似的:

PartitionKey: 951FE9AE-50FA-48F6-96C8-81D10271E36D 
RowKey: "guidValue" 

PartitionKey: 951FE9AE-50FA-48F6-96C8-81D10271E37D 
RowKey: "guidValue" 

PartitionKey: 951FE9AE-50FA-48F6-96C8-81D10271E38D 
RowKey: "guidValue" 

我的方案是:我保存一次GUID并多次阅读。

回答

1

你的阅读场景是什么?列出所有现有的GUID?或者检查一个GUID的存在?您是否想通过一个请求编写多个GUID以节省写入的交易成本并使写入性能更好?

第一个选项将使您能够使用EntityGroupTransaction批量插入GUID,但只有一个分区键的表无法在Azure存储后端的多个服务中进行负载平衡。如果您想要批量插入GUID并且总GUID数量不是太多,我建议您选择选项1;否则,选项2更好。

+0

我的方案是:检测duplicate.guid。 一个服务将一个一个地保存到表中。其他服务将检查表中是否存在该GUID –

+0

如果是,则由于您不需要批处理操作,所以选项2是您的正确选择。 –

1

PartitionKey影响每个存储服务的负载均衡和可伸缩性。

如表实体中的https://azure.microsoft.com/en-us/documentation/articles/storage-scalability-targets/#partitions-in-azure-storage的描述:

一个实体的分区键是帐户名+表名+分区密钥,其中分区键是所需的用户定义PartitionKey属性的值为实体。具有相同分区键值的所有实体都分组到相同的分区中并由相同的分区服务器提供服务。这是设计应用程序时需要了解的重要一点。您的应用程序应该平衡跨多个分区传播实体的可扩展性优势和单个分区中分组实体的数据访问优势。

,另外,

,如果你想在一组实体进行批量操作,可以考虑使用相同的分区键将它们分组。

对于可扩展性和性能目标,我建议您使用第一个结构。