如果Apache Cassandra的架构鼓励使用专为预期查询而设计的非规范化列系列,那么用户如何编辑在多列中复制的数据而不会产生不一致?
例如,这里的例子3:http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/如果Jay不再对iphone感兴趣,删除这条信息将要求删除2个独立列系列中的列。用户是否只需要对添加/编辑/删除功能进行编码以适当更新所有相关表格,或者Cassandra是否知道记录如何相关并为用户处理此问题?
答案 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,可在服务器端自动执行非规范化。物化视图将根据父表自动添加/编辑/更新。