Cassandra数据建模尊重"数据的非规范化和重复是Cassandra"生活中的事实。但是,对于非正规化数据的缺点之一是使更新变得非常困难。例如,如果我有三个表来满足不同的查询,那么选择就可以了。但是,如果在我的应用程序中,我想更新用户名,我需要更新这三个表?第一个表上的更新看起来不错。后两者怎么样?升起的费用会非常昂贵吗?我该如何处理这个案子?
CREATE TABLE users_by_username (
username text PRIMARY KEY,
email text,
age int
)
CREATE TABLE users_by_email (
email text PRIMARY KEY,
username text,
age int
)
CREATE TABLE groups (
groupname text,
username text,
email text,
age int,
hash_prefix int,
PRIMARY KEY ((groupname, hash_prefix), username)
)
答案 0 :(得分:1)
这是我在人们试图将关系模型放入Cassandra时遇到的一个典型问题。 Cassandra是一个很棒的数据库,它的功能可以带来奇迹。有许多功能可以支持各种不同的数据模型,您几乎可以涵盖所有用例。当你查看你的用例时,问题是为什么你会使用Cassandra作为关系模型? 如果你真的想让Cassandra覆盖你的用例,你将不得不在应用程序级别上执行许多不同的操作,只是为了执行更新并使数据保持一致状态。
答案 1 :(得分:0)
在观看了几个youtube剪辑后,看起来Canssandra的更新是一个简单的写入,可以将记录附加到文件系统中的提交日志中。然后将数据放入cassandra服务器中记忆,并立即向客户端发送确认。所以更新调用结束。这使得客户端的更新速度更快。
之后会发生整个压缩过程,包括基于时间戳的刷新,顺序写入和合并。