【发布时间】:2012-04-10 00:00:35
【问题描述】:
我必须为 Cassandra 测试不同的数据模型。我正在考虑使用由 key1:key2 制作的复合键作为行键。 例如,使用 Cassandra 上的此配置,我可以查询具有特定 key1 值和任何 key2 值的所有行,但否则不可能(获取具有特定 key2 值和任何 key1 的所有行)。 对吗?
提前致谢
切萨雷
【问题讨论】:
我必须为 Cassandra 测试不同的数据模型。我正在考虑使用由 key1:key2 制作的复合键作为行键。 例如,使用 Cassandra 上的此配置,我可以查询具有特定 key1 值和任何 key2 值的所有行,但否则不可能(获取具有特定 key2 值和任何 key1 的所有行)。 对吗?
提前致谢
切萨雷
【问题讨论】:
如果您使用 Order Preserving Partitioning (OPP),那么是的,键将按顺序存储,然后您可以获得一系列键的切片,例如A:A 到 A:Z -- 但不一定是 any:A 到 any:Z。
但是,OPP 不能保证在节点之间均匀分配密钥,您最终可能会遇到密钥过多或过少的“热点”。您可能希望使用随机分区 (RP),它通过在所有节点之间存储散列来分配密钥。
但是,由于列是按排序存储的,因此使用复合值可以非常强大地访问数据范围。
有关使用 Hector 查询复合列的详细信息,请参阅question。
如有必要,列名可以用作键来执行 Multiget 查询以进行其他查找。
【讨论】: