Cassandra:在没有分区的情况下建模一个小 table
Cassandra: modelling a small table without partitioning
我想使用 Cassandra(纯粹是为了方便起见)对一个小型 table 进行建模,它将所有数据放在一个节点上(并且可能将复制的数据放在其他一些节点上)。这样做的原因是我想在之后做很多 SELECT * FROM my_table
查询。
我知道有一种方法可以通过创建一个具有常量分区键的 table 并将我当前的主键放入集群键(列)中来实现这一点,但这感觉很老套。这将表面上将整个 table 存储在 r 个节点上,其中 r = 复制因子。
示例:
当前 table 和 Primary Key (param1)
。将其移至 Primary Key ('some constant', param1)
.
有没有更好的方法来实现这个,例如使用我错过的一些 Cassandra table 或键空间配置?
I know that there is a way to achieve this by creating a table with a
constant Partition Key and putting my current Primary Key into
Clustering Key (Columns), but this feels very hacky. This would
superficially store the whole table on r nodes, where r = replication
factor.
我不同意这是 hacky 或肤浅的解决方案。 Cassandra 设计的一个关键部分是选择合适的分区键,以便单个查询的所有数据都在单个分区中。在您的情况下,如果您希望读取所有 table 数据,那么拥有一个常量分区键是完全合理的。
如果您的数据集中没有常量字段,则可以使用任意值(分区 ID)。这基本上与在架构中添加任意值作为附加集群列来存储数据相同,这是一个非常常见的用例。
直接回答你的问题,不,我不认为有实现你想要的设置。
你可以按照你写的来实现你想要的,没有其他设置或旋钮可以调整。
但是请记住,未绑定查询(例如您的 SELECT * FROM my_table;
)是一种反模式。在您的情况下,所有数据将仅进入一个分区,也就是说,您将在查询期间保持 RF 节点繁忙,而非常繁忙的节点可能会导致整个集群崩溃。当然,结果分页在这里有帮助。此外,如果您只有一堆记录,这不是问题,但如果您不断向该分区添加数据,那么它迟早会反弹。我正在考虑压缩、读取修复等...
我想使用 Cassandra(纯粹是为了方便起见)对一个小型 table 进行建模,它将所有数据放在一个节点上(并且可能将复制的数据放在其他一些节点上)。这样做的原因是我想在之后做很多 SELECT * FROM my_table
查询。
我知道有一种方法可以通过创建一个具有常量分区键的 table 并将我当前的主键放入集群键(列)中来实现这一点,但这感觉很老套。这将表面上将整个 table 存储在 r 个节点上,其中 r = 复制因子。
示例:
当前 table 和 Primary Key (param1)
。将其移至 Primary Key ('some constant', param1)
.
有没有更好的方法来实现这个,例如使用我错过的一些 Cassandra table 或键空间配置?
I know that there is a way to achieve this by creating a table with a constant Partition Key and putting my current Primary Key into Clustering Key (Columns), but this feels very hacky. This would superficially store the whole table on r nodes, where r = replication factor.
我不同意这是 hacky 或肤浅的解决方案。 Cassandra 设计的一个关键部分是选择合适的分区键,以便单个查询的所有数据都在单个分区中。在您的情况下,如果您希望读取所有 table 数据,那么拥有一个常量分区键是完全合理的。
如果您的数据集中没有常量字段,则可以使用任意值(分区 ID)。这基本上与在架构中添加任意值作为附加集群列来存储数据相同,这是一个非常常见的用例。
直接回答你的问题,不,我不认为有实现你想要的设置。
你可以按照你写的来实现你想要的,没有其他设置或旋钮可以调整。
但是请记住,未绑定查询(例如您的 SELECT * FROM my_table;
)是一种反模式。在您的情况下,所有数据将仅进入一个分区,也就是说,您将在查询期间保持 RF 节点繁忙,而非常繁忙的节点可能会导致整个集群崩溃。当然,结果分页在这里有帮助。此外,如果您只有一堆记录,这不是问题,但如果您不断向该分区添加数据,那么它迟早会反弹。我正在考虑压缩、读取修复等...