我有一堆数据(我们会说几百万行),并希望在不 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等单个查询?或者我接近这完全错了?
答案 0 :(得分:1)
到目前为止,您的第二个选择。您总是希望进行点查询(指定分区键和rowkey的查询)。您的第一个选项(查询非索引字段的大量实体)将导致限制和性能不佳,并且仅适用于非常罕见或未计划的查询。如果您还没有阅读,我强烈推荐: