关于Cassandra中的删除和墓碑(五)

栏目: 数据库 · 发布时间: 6年前

内容简介:关于Cassandra中的删除和墓碑(五)

减轻墓碑带来的麻烦

好了,现在我们已经明白为什么我们要用墓碑,我们对墓碑也有一个大致的了解了。现在让我们看看墓碑会引起哪些潜在的麻烦,我们可以采取哪些措施来减轻这些麻烦。

首先一个很显而易见的事情就是墓碑没有让数据被删掉,反而增加了存储。我们需要删除这些墓碑以腾出磁盘空间,并且限制读出无用数据的大小,以降低时延和提高资源利用率。这个事情就发生在接下来你看到的压实的过程。

压实(Compactions)

当我们读取某一行数据的时候,为了读取到这一行数据的所有片段,我们翻阅的SSTables阅读,读时延就越大。因此我们有必要把这些片段通过压实的过程把他们合并,以获得更低的读时延。这个过程包括把合适的目标也清除掉,如我所愿的持续释放可用的空间。

压实的过程是通过合并来自多个sstable的row片段,去删除满足一定条件的墓碑。有些条件是在表的schema中指定的,而且是可以优化可调节的,比如gc_grace_seconds参数,有些条件是cassandra内部的,代码里写死的,这是为了保证数据持久化和一致性。要保证没有参与当前压实的sstable(重叠sstables)里没有新的数据片段,这是防止墓碑被清掉以后,数据又出现成为僵尸数据的必要条件。

再看上面的例子,经过删除和flush以后,表数据目录大致如下:

alain$ ll /Users/alain/.ccm/Cassa-3.7/node1/data/tlp_lab/tombstones-c379952033d311e6aa4261d6a7221ccb/

total 360

drwxr-xr-x  43 alain  staff  1462 Jun 17 11:39 .

drwxr-xr-x   3 alain  staff   102 Jun 16 20:25 ..

drwxr-xr-x   2 alain  staff    68 Jun 16 17:05 backups

-rw-r–r–   1 alain  staff    43 Jun 17 11:13 mb-10-big-CompressionInfo.db

-rw-r–r–   1 alain  staff    43 Jun 17 11:13 mb-10-big-Data.db

-rw-r–r–   1 alain  staff    10 Jun 17 11:13 mb-10-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 11:13 mb-10-big-Filter.db

-rw-r–r–   1 alain  staff     9 Jun 17 11:13 mb-10-big-Index.db

-rw-r–r–   1 alain  staff  4701 Jun 17 11:13 mb-10-big-Statistics.db

-rw-r–r–   1 alain  staff    59 Jun 17 11:13 mb-10-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 11:13 mb-10-big-TOC.txt

-rw-r–r–   1 alain  staff    43 Jun 17 11:33 mb-11-big-CompressionInfo.db

-rw-r–r–   1 alain  staff    53 Jun 17 11:33 mb-11-big-Data.db

-rw-r–r–   1 alain  staff     9 Jun 17 11:33 mb-11-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 11:33 mb-11-big-Filter.db

-rw-r–r–   1 alain  staff     9 Jun 17 11:33 mb-11-big-Index.db

-rw-r–r–   1 alain  staff  4611 Jun 17 11:33 mb-11-big-Statistics.db

-rw-r–r–   1 alain  staff    59 Jun 17 11:33 mb-11-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 11:33 mb-11-big-TOC.txt

-rw-r–r–   1 alain  staff    43 Jun 17 11:33 mb-12-big-CompressionInfo.db

-rw-r–r–   1 alain  staff    42 Jun 17 11:33 mb-12-big-Data.db

-rw-r–r–   1 alain  staff    10 Jun 17 11:33 mb-12-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 11:33 mb-12-big-Filter.db

-rw-r–r–   1 alain  staff     9 Jun 17 11:33 mb-12-big-Index.db

-rw-r–r–   1 alain  staff  4611 Jun 17 11:33 mb-12-big-Statistics.db

-rw-r–r–   1 alain  staff    59 Jun 17 11:33 mb-12-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 11:33 mb-12-big-TOC.txt

-rw-r–r–   1 alain  staff    43 Jun 17 11:39 mb-13-big-CompressionInfo.db

-rw-r–r–   1 alain  staff    32 Jun 17 11:39 mb-13-big-Data.db

-rw-r–r–   1 alain  staff     9 Jun 17 11:39 mb-13-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 11:39 mb-13-big-Filter.db

-rw-r–r–   1 alain  staff    11 Jun 17 11:39 mb-13-big-Index.db

-rw-r–r–   1 alain  staff  4591 Jun 17 11:39 mb-13-big-Statistics.db

-rw-r–r–   1 alain  staff    65 Jun 17 11:39 mb-13-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 11:39 mb-13-big-TOC.txt

-rw-r–r–   1 alain  staff    43 Jun 17 11:12 mb-9-big-CompressionInfo.db

-rw-r–r–   1 alain  staff   127 Jun 17 11:12 mb-9-big-Data.db

-rw-r–r–   1 alain  staff    10 Jun 17 11:12 mb-9-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 11:12 mb-9-big-Filter.db

-rw-r–r–   1 alain  staff    20 Jun 17 11:12 mb-9-big-Index.db

-rw-r–r–   1 alain  staff  4740 Jun 17 11:12 mb-9-big-Statistics.db

-rw-r–r–   1 alain  staff    61 Jun 17 11:12 mb-9-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 11:12 mb-9-big-TOC.txt

你的sstable数量可能大多数和上面的例子不太一样,但是插入和删除操作都是一样的。我们可以看到这个含有墓碑的表其实实际上已经空了。存在磁盘上的文件只有墓碑和那些已经被删掉的条目数据。从读取数据的角度看,是空的结果:

echo “SELECT * FROM tlp_lab.tombstones LIMIT 100;” | cqlsh

fruit | date | crates

——-+——+——–

(0 rows)

在这时候,我们触发一个major级别的压实,压实所有的sstable。 压实操作通常是自动运行的,禁止自动压实,而手动执行一个major压实很少情况是使用,这里只是为了完成教学的目的。

nodetool -p 7100 compact

现在所有的sstable已经合并成一个了:

alain$ ll /Users/alain/.ccm/Cassa-3.7/node1/data/tlp_lab/tombstones-c379952033d311e6aa4261d6a7221ccb/

total 72

drwxr-xr-x  11 alain  staff   374 Jun 17 14:50 .

drwxr-xr-x   3 alain  staff   102 Jun 16 20:25 ..

drwxr-xr-x   2 alain  staff    68 Jun 16 17:05 backups

-rw-r–r–   1 alain  staff    51 Jun 17 14:50 mb-14-big-CompressionInfo.db

-rw-r–r–   1 alain  staff   105 Jun 17 14:50 mb-14-big-Data.db

-rw-r–r–   1 alain  staff    10 Jun 17 14:50 mb-14-big-Digest.crc32

-rw-r–r–   1 alain  staff    16 Jun 17 14:50 mb-14-big-Filter.db

-rw-r–r–   1 alain  staff    20 Jun 17 14:50 mb-14-big-Index.db

-rw-r–r–   1 alain  staff  4737 Jun 17 14:50 mb-14-big-Statistics.db

-rw-r–r–   1 alain  staff    61 Jun 17 14:50 mb-14-big-Summary.db

-rw-r–r–   1 alain  staff    92 Jun 17 14:50 mb-14-big-TOC.txt

下面是这个sstable的内容,包含所有的墓碑,已经合并到同一个文件同一个数据结构中了:

alain$ SSTabledump /Users/alain/.ccm/Cassa-3.7/node1/data/tlp_lab/tombstones-c379952033d311e6aa4261d6a7221ccb/mb-14-big-Data.db

[

  {

    “partition” : {

      “key” : [ “apple” ],

      “position” : 0

    },

    “rows” : [

      {

        “type” : “range_tombstone_bound”,

        “start” : {

          “type” : “exclusive”,

          “clustering” : [ “20160615” ],

          “deletion_info” : { “marked_deleted” : “2016-06-17T09:14:11.697040Z”, “local_delete_time” : “2016-06-17T09:14:11Z” }

        }

      },

      {

        “type” : “row”,

        “position” : 40,

        “clustering” : [ “20160617” ],

        “deletion_info” : { “marked_deleted” : “2016-06-17T09:33:56.367859Z”, “local_delete_time” : “2016-06-17T09:33:56Z” },

        “cells” : [ ]

      },

      {

        “type” : “range_tombstone_bound”,

        “end” : {

          “type” : “inclusive”,

          “deletion_info” : { “marked_deleted” : “2016-06-17T09:14:11.697040Z”, “local_delete_time” : “2016-06-17T09:14:11Z” }

        }

      }

    ]

  },

  {

    “partition” : {

      “key” : [ “pickles” ],

      “position” : 73,

      “deletion_info” : { “marked_deleted” : “2016-06-17T09:38:52.550841Z”, “local_delete_time” : “2016-06-17T09:38:52Z” }

    }

  }

]

注意到, 那些已经墓碑化了的数据(译者注:被删掉的数据,不是指墓碑)已经在压实过程中直接被干掉了。然而正如我们前面讨论的,我们要仍然存储这个墓碑标记在磁盘上,因为我们要保持一个这样的删除记录,以便有有效的传递这个删除操作在整个集群中。而数据实际的值我们没必要保留,因为这不影响数据一致性。


以上所述就是小编给大家介绍的《关于Cassandra中的删除和墓碑(五)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective STL中文版

Effective STL中文版

[美]Scott Meyers / 潘爱民、陈铭、邹开红 / 清华大学出版社 / 2006-1 / 30.00元

STL是C++标准库的一部分。本书是针对STL的经验总结,书中列出了50个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。一起来看看 《Effective STL中文版》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换