【发布时间】:2015-02-03 14:13:20
【问题描述】:
这个问题是关于 NoSQL 的(比如 cassandra)。
当您使用没有数据复制的 NoSQL 数据库时,您是否真的没有一致性问题?在访问并发的情况下也不行?
如果一个分区在两个分区中写入了相同的行,并且可能多次写入,会发生什么情况?分区没了,用的是哪个写入值?
假设您使用 N=5 W=3 R=3。这意味着您已经保证了一致性,对吗?使用这个法定人数有多好?有 3 个节点返回数据不是很大的开销吗?
您能否在 cassandra 中针对每个查询指定是否希望查询保证一致性?例如,您执行插入查询,并且希望强制所有副本在读取操作返回值之前完成插入?
-
如果您有:employees{PK:employeeID, departmentId, employeeName,birthday} 和部门{PK:departmentID, departmentName},并且您想获取具有特定部门名称的所有员工的生日。两个问题:
- 您不能要求所有具有给定生日的员工(因为您只能查询主键)
- 您无法加入员工和部门列族,因为无法加入。
所以你可以做的是创建一个列族:
departmentBirthdays{PK:(departmentName,birthday), [employees-whos-birthday-it-is]}
在这种情况下,每当员工被解雇/雇用时,都必须将其删除/添加到 departmentBirthdays 列族中。这个过程是你必须手动完成的吗?所以你必须手动创建查询来更新所有冗余/非规范化数据?
【问题讨论】: