Cassandra如何管理列和列数据的插入,更新和删除。国内

时间:2014-08-05 11:47:45

标签: cassandra cql3

实际上我对cassandra的一些概念感到困惑。

  1. 我们通过更新Cassandra行实际意味着什么?是否意味着在列的值中添加更多列或更新。或者两者兼而有。?
  2. 当我们在一行中添加更多列时。 sstable的前一行是无效的,新的行条目插入到SSTABLE中并添加了新的行。?
  3. 由于SSTable是不可变的,因此列数据中的每个新更新或列数据的删除或列数据删除都会导致前一行无效并插入一个新行,其中包含所有前一列+新列?
  4. 请帮助..

2 个答案:

答案 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