Cassandra:在没有分区的情况下对小桌子进行建模

时间:2017-01-10 21:28:21

标签: cassandra cql

我想使用Cassandra(纯粹出于方便的原因)建模一个小表,它将所有数据放在一个节点上(并且可能在其他一些节点上复制数据)。这样做的原因是我之后想要从中做很多SELECT * FROM my_table次查询。

我知道有一种方法可以通过创建一个带有常量分区键的表并将我当前的主键放入群集键(列)来实现这一点,但这感觉非常黑客。这将在r节点上表面存储整个表,其中r =复制因子。

实施例: 当前表格为Primary Key (param1)。将其移至Primary Key ('some constant', param1)

有没有更好的方法来实现这一目标,例如使用我错过的一些Cassandra表或键空间配置?

2 个答案:

答案 0 :(得分:3)

  

我知道有一种方法可以通过创建一个带有表的表来实现   常量分区键并将我当前的主键放入   聚类键(列),但这感觉非常hacky。这个会   在r节点上表面存储整个表,其中r =复制   因素。

我不同意这是hacky或肤浅的解决方案。 Cassandra设计的一个关键部分是选择适当的分区键,以便单个查询的所有数据都在一个分区中。在您的情况下,如果您希望读取所有表数据,那么完全合理地拥有一个常量分区键。

如果数据集中没有任何字段是常量,那么使用任意值(分区ID)就可以了。这基本上与在架构中添加任意值作为附加集群列来存储数据相同,这是一个非常常见的用例。

直接回答你的问题,不,我不认为有设置可以实现你想要的。

答案 1 :(得分:0)

你可以通过做你写的东西来完全达到你想要的效果,没有其他你可以调整的设置或旋钮。

但请注意,未绑定的查询(例如您的SELECT * FROM my_table;)是反模式。在您的情况下,所有数据将仅转到一个分区,即您在查询期间将 RF 节点保持忙碌,而非常繁忙的节点可能会导致整个群集崩溃。当然,结果分页在这里有所帮助。此外,如果您只有一堆记录,这不是问题,但如果您继续向此分区添加数据,那么它迟早会回火。我正在考虑压缩,阅读修理等......