如果 Cassandra 促进了非规范化数据的使用,那么用户如何在不造成不一致的情况下编辑它?
If Cassandra facilitates the use of non-normalized data, how do users edit it without creating inconsistencies?
如果 Apache Cassandra 的架构鼓励使用专为预期查询设计的非规范化列族,那么用户如何编辑跨多个列复制的数据而不会造成不一致?
例如此处的示例 3:http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/
如果 Jay 不再对 iPhone 感兴趣,删除这条信息将需要删除 2 个分离的列族中的列。用户是否只需要编写 add/edit/delete 适当更新所有相关表的函数,或者 Cassandra 是否以某种方式知道记录是如何相关的并为用户处理这些?
用户需要自己编写 add/edit/delete 函数。
请注意,Cassandra 3.0 materialised view 可以在服务器端自动执行反规范化。实体化视图会 add/edit/update 自动基于父 table。
在 Cassandra 2.x 世界中,保持非规范化查询 table 一致的方法是使用原子批处理。
在取自 CQL 文档的示例中,假设我有两个 table 用于用户数据。一个是 "users" table,另一个是 "users_by_ssn." 为了使这两个 table 保持同步(如果用户更改他们的 "state" 居住地)我会需要像这样应用更新插入:
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;
如果 Apache Cassandra 的架构鼓励使用专为预期查询设计的非规范化列族,那么用户如何编辑跨多个列复制的数据而不会造成不一致?
例如此处的示例 3:http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/
如果 Jay 不再对 iPhone 感兴趣,删除这条信息将需要删除 2 个分离的列族中的列。用户是否只需要编写 add/edit/delete 适当更新所有相关表的函数,或者 Cassandra 是否以某种方式知道记录是如何相关的并为用户处理这些?
用户需要自己编写 add/edit/delete 函数。
请注意,Cassandra 3.0 materialised view 可以在服务器端自动执行反规范化。实体化视图会 add/edit/update 自动基于父 table。
在 Cassandra 2.x 世界中,保持非规范化查询 table 一致的方法是使用原子批处理。
在取自 CQL 文档的示例中,假设我有两个 table 用于用户数据。一个是 "users" table,另一个是 "users_by_ssn." 为了使这两个 table 保持同步(如果用户更改他们的 "state" 居住地)我会需要像这样应用更新插入:
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;