实际上我对cassandra的一些概念感到困惑。
请帮助..
答案 0 :(得分:2)
我们通过更新Cassandra行实际意味着什么?这意味着加入 列的值更多列或更新。或者它们都是。?
在cassandra中,更新行和插入行是相同的操作,机器人导致将数据添加到memtable(内存中的sstable),后者刷新到磁盘并成为sstable(也写入日志行)如果启用了持久写入,则提交日志)。如果您插入一个列(以cassandra术语表示btw,一个列与单元格相同,并且一行称为分区,您可能会发现这有用,如果您进行任何进一步的阅读)已经存在,例如:
INSERT INTO db.tbl (id, value) VALUES ('text_id1', 'some text as a value');
INSERT INTO db.tbl (id, value) VALUES ('text_id1', 'some text as a value');
最终会有1个分区,因为第一个分区会覆盖第一个分区。这意味着插入具有重复键的分区会导致前一个键被覆盖(并且覆盖基于插入时的时间戳,最后写入获胜)。
当我们向行(分区)添加更多列(单元格)时。是个 sstable中的前一行无效,新行条目为 使用新添加的行插入SSTABLE。?
对于cql,前面的列只包含null
值。不会发生失效,您可以随意更改架构。如果删除列,则在下一次压缩期间将删除其数据,以便回收磁盘空间。
由于SSTable是不可变的,因此列数据OR中的每个新更新 添加列或删除列数据将导致 使前一行无效并插入一个包含所有新行的新行 上一栏+新栏?
有些,sstables在必要时合并为更大的sstables,如何完成取决于正在使用的压缩策略。有两种口味,大小分层和水平压实。涵盖他们的工作方式是一个完全独立的问题,由比我更聪明的人回答have a read here。
答案 1 :(得分:0)
此处包含更新: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_write_update_c.html
正如您所注意到的,SSTables是不可变的,因此您可能想知道当稍后的写入取代SSTable中已有的数据时会发生什么。存储引擎从可能具有所请求行的数据的所有表中读取(由每个表的bloom过滤器确定)。了解读取路径可能会为您阐明: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_about_reads_c.html 特别: http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_about_read_path_c.html