如果Cassandra有助于使用非规范化数据,用户如何编辑它而不会产生不一致性?

时间:2015-09-21 07:44:55

标签: cassandra denormalization

如果Apache Cassandra的架构鼓励使用专为预期查询而设计的非规范化列系列,那么用户如何编辑在多列中复制的数据而不会产生不一致?

例如,这里的例子3:http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/

如果Jay不再对iphone感兴趣,删除这条信息将要求删除2个独立列系列中的列。用户是否只需要对添加/编辑/删除功能进行编码以适当更新所有相关表格,或者Cassandra是否知道记录如何相关并为用户处理此问题?

2 个答案:

答案 0 :(得分:2)

在Cassandra 2.x世界中,保持非规范化查询表一致的方法是使用原子批次。

在一个取自CQL文档的示例中,假设我有两个用于用户数据的表。一个是“用户”表,另一个是“users_by_ssn”。为了使这两个表保持同步(如果用户改变其居住的“状态”),我需要应用这样的upsert:

BEGIN BATCH;
  UPDATE users
    SET state = 'TX'
    WHERE user_uuid = 8a172618-b121-4136-bb10-f665cfc469eb;
  UPDATE users_by_ssn 
    SET state = 'TX'
    WHERE ssn = '888-99-3987';
APPLY BATCH;

答案 1 :(得分:0)

用户需要自己编写添加/编辑/删除功能。

请注意,Cassandra 3.0具有materialised view,可在服务器端自动执行非规范化。物化视图将根据父表自动添加/编辑/更新。