哪个更快的Azure表查询:对任意列的单个查询,或具有行/分区键的许多查询?

时间:2015-05-11 03:23:48

标签: azure

我有一堆数据(我们会说几百万行),并希望在 RowKey或PartitionKey的密钥上查询它。为了方便这一点,我创建了一个索引表,其中PartitionKey是一个静态字符串值,RowKey是我想要查询的键的值。举例说明:

**CHARACTERS**
PartitionKey  RowKey  DateKilled  FavoriteFood
----------------------------------------------
Stark         Arya    299 AL      Hot Cakes
Stark         Bran    301 AL      Pigeon Pie
Stark         Rickon  ---         Berries
Lannister     Cersie  300 AL      Boar
Lannister     Tywin   299 AL      Beating hearts of innocents
Lannister     Tyrion  ---         Wine

**CHARACTERSIDX**
PartitionKey    RowKey  Chars
----------------------------------
date_killed_idx 299 AL    [{House: Stark, Name: Arya}, {House: Lannister, Name:Tywin}]
date_killed_idx 300 AL    [{House: Lannister, Name:Cersie}]
date_killed_idx 301 AL    [{House: Stark, Name: Bran}]

鉴于以上数据,我想找到299 AL中遇难的每个人最喜欢的食物。这两种方法:

1)查询 CHARACTERS 并按DateKilled过滤(​​需要全表扫描)

2)查询 CHARACTERSIDX ,然后对299 AL中的每个条目,一次查询 CHARACTERS 中的各个行。

所以对于这个人为的例子,没关系。但是想象一下,如果 CHARACTERS 中的行数是1,10或1亿,而且Houses和characters的数量也在相同的范围内(并不是很多按分区组合在一起)。做一个优化不佳的查询会更好吗?或者使用来自 CHARACTERSIDX 的单个优化查询的输出的10,000,5,000等单个查询?或者我接近这完全错了?

1 个答案:

答案 0 :(得分:1)

到目前为止,您的第二个选择。您总是希望进行点查询(指定分区键和rowkey的查询)。您的第一个选项(查询非索引字段的大量实体)将导致限制和性能不佳,并且仅适用于非常罕见或未计划的查询。如果您还没有阅读,我强烈推荐:

Azure Storage Table Design Guide