代码之家  ›  专栏  ›  技术社区  ›  Aravind

RocksDB vs Cassandra

  •  3
  • Aravind  · 技术社区  · 7 年前

    MyRocks(MySql)和Cassandra都使用LSM架构来存储数据。所以我用MyRocks作为存储引擎,在MySql和Cassandra中填充了大约500万行。在Cassandra中只需要1.7GB的磁盘空间,而在MySql中,使用MyRocks作为存储引擎,需要19GB的磁盘空间。

    我错过什么了吗?两者使用相同的LSM机制。但为什么它们的数据大小不同呢?

    更新:

    我想这与文字栏有关。我的表结构是(bigint,bigint,varchar,text)。

    • 填充行数:300000
    • 在MyRocks中,数据大小为185MB

    但是如果我删除文本列,那么:

    • MyRocks-21.6 MB

    你知道这种行为吗?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Aravind    5 年前

    上述行为的原因是由于rocksdb\u block\u大小设置为4kb。由于较小的数据块,压缩器发现要压缩的数据量较小。将其设置为16kb解决了这个问题。现在我得到了与cassandra相似的数据大小。

        2
  •  0
  •   Highstead    7 年前

    不是百分之百在我的岩石上。但Cassandra是LSM,也是键值存储。这意味着,如果列为“null”,则不会存储在磁盘上。传统上,RDBMS仍然会消耗一些空间(varchar、空字符指针等),因此这可能是您丢失空间的原因。

    此外,cassandra压缩数据。尝试: ALTER myTable WITH compression = { 'enabled' : false };