1

所以我定义了一个使用复合 id 作为行键的列族。所以说复合键是CompositeType(LongType,LongType). SELECT因此,我已经测试了使用这种类型存储项目,并且当我知道完整密钥时,它工作正常并且按预期工作。但是可以说我想要所有具有 0 作为第一个元素和任何作为第二个元素的键。到目前为止,我可以看到执行此查询的唯一方法如下:

如果我是 0:* 的所有键,那么key >= 0:0 AND key < 1:0只要有一个保留顺序的分区器,我就会执行一个 CQL 查询。

我的问题是:

1)这种奇怪的语法只是因为我使用的是 CQL 驱动程序(除了节俭之外,nodejs 的唯一选项)

2)这种类型的查询效率低下吗?本质上,我使用的是复合键而不是超级列,因为 CQL 不支持这些列。只要像这样使用它没有任何限制,我在代码中处理这个逻辑就没有问题。

4

2 回答 2

1

我建议你改变你的数据模型。使用 RandomPartitioner 并将第一个组件作为行键。将第二个组件推送到列名中,即使您的列名组合起来。

由于列名始终是排序的,因此您可以进行简单的切片操作。例如,

a)当您知道这两个组件时,对行键(第一个组件)和复合的第一个组件进行获取切片。

b)当您只知道第一个组件时,获取行键的完整行(第一个组件)

这是 CQL3 在您要求它创建具有多个主键的表时采用的方法。

于 2012-07-31T04:35:28.380 回答
0

您最好的选择是使用CQL 3。这将允许您在下面使用复合来优化查找,同时仍然允许您使用复合值的各个部分,就好像它们是单独的列一样。您当前在行键中使用复合,而 CQL 3 仅支持列名中的复合(到目前为止),但这可能没问题。在许多这样的情况下,将合成从行键转移到列名不会对您的性能或数据分布产生不利影响,但如果您的行键没有足够的选择性,那么它可能会。

不过,无论哪种方式,您都应该关注 CQL 3。CQL 2 已被弃用。如果我对您的情况有更多了解,我可以告诉您更多有关如何使您的模型适应 CQL 3 的信息。

于 2012-07-30T22:15:49.330 回答