2

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

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

更新:

我想这与文本列有关。我的表结构是(bigint、bigint、varchar、text)。

  • 填充的行数:300 000
  • MyRocks 中的数据大小为 185MB
  • 在 Cassandra 中 - 13 MB。

但是如果我删除文本列然后:

  • MyRocks - 21.6 MB
  • 卡桑德拉 - 11 MB

关于这种行为的任何想法?

4

2 回答 2

3

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

于 2018-06-06T16:21:03.890 回答
0

在 MyRocks 上不是 100%。但 Cassandra 是 LSM,也是 Key value store。这意味着如果您的列是“空”,它将不会存储在磁盘上。传统上,RDBMS 仍会消耗一些空间(varchars、空字符指针等),因此这可能会导致您丢失空间。

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

于 2017-11-02T18:10:05.710 回答