如何为已具有唯一属性的表选择Azure Table ParitionKey和RowKey

如何为已具有唯一属性的表选择Azure Table ParitionKey和RowKey,azure,azure-table-storage,Azure,Azure Table Storage,我的实体是一个键值对。90%的时间我将基于键检索实体,但10%的时间我还将执行反向查找,即,我将按值搜索并获取键 密钥和值都保证是唯一的,因此它们的组合也保证是唯一的 使用Key作为PartitionKey和Value作为RowKey是否正确 我相信这也将确保我的数据在服务器之间实现完美的负载平衡,因为ParitionKey是唯一的 上述决定有什么问题吗? 在任何情况下,都可以使用硬编码分区密钥吗?即所有行都有相同的分区键?保持行键的唯一性?可行吗,是的,但取决于数据的大小,我不太确定这是个好主

我的实体是一个键值对。90%的时间我将基于键检索实体,但10%的时间我还将执行反向查找,即,我将按值搜索并获取键

密钥和值都保证是唯一的,因此它们的组合也保证是唯一的

使用Key作为PartitionKey和Value作为RowKey是否正确

我相信这也将确保我的数据在服务器之间实现完美的负载平衡,因为ParitionKey是唯一的

上述决定有什么问题吗?
在任何情况下,都可以使用硬编码分区密钥吗?即所有行都有相同的分区键?保持行键的唯一性?

可行吗,是的,但取决于数据的大小,我不太确定这是个好主意。当您查询分区键时,表存储可以直接转到确切的分区并检索所有记录。如果只查询Rowkey,表存储必须检查该行是否存在于表的每个分区中。因此,如果有1000个键值对,则按键搜索将读取单个分区/行。如果您仅通过您的值进行搜索,它将读取所有1000个分区

我面临着一个类似的问题,我用两种方法解决了它:

  • 有两个不同的表,一个以partitionKey作为键,另一个以值作为partitionKey。存储成本很低,所以复制数据的成本应该不会太高

  • (我最后做的)如果您基于唯一键有效地返回单个实体,只需将它们放在BLOB中(如第1点所示进行分区和透视),因为您不需要遍历表,所以不需要遍历表