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

Cassandra如何管理列和列数据的插入、更新和删除。内部,cassandra,cql3,Cassandra,Cql3,实际上,我对卡桑德拉的一些概念感到困惑。 我们更新Cassandra row实际上是什么意思?这是否意味着添加更多列或更新列的值。或者两者兼而有之。? 当我们向一行添加更多列时。sstable中的前一行是否已失效,并且新行条目是否与新添加的行一起插入sstable中。? 由于SSTable是不可变的,因此每次更新列数据或添加列或删除列数据都会导致上一行无效,并插入一个包含所有上一列+新列的新行? 请帮忙 此处介绍了更新: 正如您所注意到的,SSTables是不可变的,所以您可能想知道当稍后的写

实际上,我对卡桑德拉的一些概念感到困惑。

  • 我们更新Cassandra row实际上是什么意思?这是否意味着添加更多列或更新列的值。或者两者兼而有之。?
  • 当我们向一行添加更多列时。sstable中的前一行是否已失效,并且新行条目是否与新添加的行一起插入sstable中。?
  • 由于SSTable是不可变的,因此每次更新列数据或添加列或删除列数据都会导致上一行无效,并插入一个包含所有上一列+新列的新行?
  • 请帮忙

    此处介绍了更新:

    正如您所注意到的,SSTables是不可变的,所以您可能想知道当稍后的写入替换SSTable中已有的数据时会发生什么。存储引擎从可能包含请求行数据的所有表中读取数据(由每个表的bloom筛选器确定)。了解读取路径可能会为您澄清这一点: 明确地:

    我们更新Cassandra row实际上是什么意思?这是不是意味着要增加 更多列或更新列的值。或者两者兼而有之

    在cassandra中,更新行和插入行是相同的操作,bot会将数据添加到memtable(内存中的sstable),后者会刷新到磁盘并成为sstable(如果启用了持久写入,还会将日志行写入提交日志)。如果插入已经存在的列(顺便说一句,在cassandra术语中,列与单元格相同,行称为分区,如果您进一步阅读,您可能会发现这很有用),例如:

    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');
    
    您将得到一个分区,因为第一个分区被第二个插入覆盖。这意味着插入具有重复键的分区会导致覆盖上一个分区(覆盖基于插入时的时间戳,最后一次写入获胜)

    当我们向一行(分区)添加更多列(单元格)时。是 sstable中的上一行无效,新行条目无效 插入到带有新添加行的SSTABLE中

    对于cql,前面的列只包含一个
    null
    值。不会发生无效,您可以随意更改模式。如果删除列,其数据将在下次压缩期间删除,目的是回收磁盘空间

    由于SSTable是不可变的,所以列数据或 添加列或删除列数据将导致 使前一行无效并插入一个包含所有 上一列+新列


    在某种程度上,必要时将SSTABLE合并到更大的SSTABLE中,这取决于所使用的压缩策略。有两种口味,大小分层和水平压实。涵盖它们如何工作是一个完全独立的问题,比我聪明的人已经回答了。

    这是三个广泛的问题。请提出具体问题。很好的解释。谢谢你的链接。真是帮了大忙@亚当,当我读到第一个链接时,一个问题掠过我的脑海。内存中的每个SStable是否都有单独的密钥缓存,由Cassandra为特定SStable的持久化分区维护??