Azure表按rowkey查询为条件

时间:2013-10-31 20:19:41

标签: azure-storage azure-table-storage

使用查询通过rowkey获取记录/记录有多好?是否有任何查询只检查行键的意义?我知道你可以结合使用primarykey + rowkey并获取特定记录,或者通过特定的分区键获取所有记录(这样所有相关数据都将快速返回)。

我想如果您创建一个查找rowkey的查询,那么当您查询具有大量项目的表时,性能将会下降,因为它必须查看所有项目。

你们可以通过rowkey(单独)查询来判断一个案例吗?我并不是指在检索到的结果中,而是在发送到azure存储区的查询中返回项目。

2 个答案:

答案 0 :(得分:8)

Azure表存储(截至目前)构建两个索引,使查找速度更快/更快,即PartitionKey和Rowkey。如果你有一个分区(或者很少的分区),那么仅通过rowkey查询才有意义。如果您有很多分区,并且只需指定rowkey,则必须查找所有分区。

例如,假设您将社会保险号存储在表存储中。我们来看两个场景......

一个好的分区策略可能是将状态作为分区键。在您的查询中,如果您只是传递PartitionKey ='CA'& RowKey ='123456789'Azure表存储知道要转到的分区以及该分区中的确切行。如果您的查询只是:RowKey ='123456789',Azure表存储必须扫描所有分区(50个状态)以找到匹配的RowKey。

另一种策略可能是一个巨大的单个分区,其中rowkeys作为社会安全号码。如果您的查询:RowKey ='123456789',那么Azure表存储可以使用rowkey上的索引来非常快速地查找该值。由于只有一个分区,因此不参与查询的PartitionKey不会减慢速度(或者至少不应该减慢速度)。

另外请记住,Azure表存储在内部可以将分区放在不同的驱动器上,以便进行大量使用。因此,为具有大量分区的大型表指定partitionkey是理想的选择。

答案 1 :(得分:2)

正如Bart Czernicki所提到的,只在查询中指定Row Key会导致全表扫描,因为服务器需要遍历表中的所有分区。请在How to get most out of Windows Azure Tables文章中找到有关此主题的更多信息(特别是"分区"部分)。