Cassandra在其中一个聚类列中更新值

pra*_*tsJ 8 database data-modeling cassandra

建议在cassandra中围绕查询进行数据建模.但是,如果我模型将列设置为聚类列以进行基于它的排序,并且该对象是动态的,因为它是聚类列,我无法更新其值,因为它现在属于该表的主键.在这种情况下,有两个选择

  1. 客户端排序(这很糟糕)
  2. 删除完整行并插入新行(将创建墓碑)

在Cassandra数据建模中还有其他有效的方法吗?

例如.我有table_A和查询获取具有特定状态的所有行table_A_by_state.但是,由于状态将是动态的,并且您需要更新table_A_by_state中的状态,该状态随附我上面提到的选项.有其他人遇到同样的问题还是有其他方法的数据建模这个问题?

table_A:列:id(K),名称,状态

table_A_by_state:列:id(K),state(C),name

xma*_*s79 3

根据每个分区中的记录数量,您可以尝试使用索引,并看看可以将它们扩展到多远。

不幸的是没有其他选择。举个例子,如果您使用 Cassandra 3.0+ 并希望使用物化视图来满足您的排序要求,那么您实际上属于选项 2,因为 C* 向您隐瞒了它将创建另一个表并插入/更新/删除场景下的该表。所以,是的,它会为你创建墓碑。

然而,选项 1 也不是那么糟糕(如果您管理相对少量的记录,因为获取大量行是一种反模式),假设您必须在某处执行订单。是的,存储和检索订购的数据是一个很大的优势,但更好的是在客户端进行排序,而不是成为具有墓碑和写入/读取超时的魔术师......