我的实体是一个关键值对。 90%的时间我将根据密钥检索实体,但有10%的时间我也会进行反向查找,即我将按值搜索并获取密钥。
密钥和价值都保证是唯一的,因此它们的组合也保证是独一无二的。
使用Key作为PartitionKey和Value作为RowKey是否正确?
我相信这也将确保我的数据在服务器之间完全负载平衡,因为ParitionKey是唯一的。
上述决定是否有任何问题? 在任何情况下,使用硬编码分区密钥是否可行?即所有行都有相同的分区键?并保持RowKey唯一?
答案 0 :(得分:7)
是否可行,是的,但根据您的数据大小,我不太确定这是一个好主意。查询分区键时,Table Store可以直接转到确切的分区并检索所有记录。如果仅对Rowkey进行查询,则表存储必须检查该表的每个分区中是否存在该行。因此,如果您有1000个键值对,则按键搜索将读取单个分区/行。如果仅通过您的价值进行搜索,它将会读取所有1000个分区!
我遇到了类似的问题,我解决了两个问题:
有两个不同的表,一个用partitionKey作为你的键,另一个用你的值作为partitionKey。存储很便宜,因此重复数据的成本不会太高。
(我最终做了什么)如果您基于一个唯一的键有效地返回单个entites,只需将它们粘贴在blob中(按照第1点分区和旋转),因为您不需要遍历表,所以不要。