RocksDB 与卡桑德拉
RocksDB vs Cassandra
MyRocks (MySql) 和 Cassandra 都使用 LSM 架构来存储它们的数据。因此,我使用 MyRocks 作为存储引擎在 MySql 以及 Cassandra 中填充了大约 500 万行。在 Cassandra 中它只需要 1.7 GB 的磁盘 space 而在使用 MyRocks 作为存储引擎的 MySql 中,它需要 19 GB。
我错过了什么吗?两者使用相同的 LSM 机制。但为什么它们的数据大小不同?
更新:
估计跟text栏有关系。我的 Table 结构是 (bigint,bigint,varchar,text)。
- 填充的行数:300 000
- 在 MyRocks 中数据大小为 185MB
- 在 Cassandra 中 - 13 MB。
但如果我删除文本列,那么:
- MyRocks - 21.6 MB
- 卡桑德拉 - 11 MB
对这种行为有什么想法吗?
MyRocks 并非 100%。但 Cassandra 是 LSM,也是 Key value store。这意味着如果您的列是 'null',它将不会存储在磁盘上。传统上,RDBMS 仍会消耗一些 space(varchars、空字符指针等),因此这可能会导致您丢失 space.
另外cassandra压缩数据。尝试:
ALTER myTable WITH compression = { 'enabled' : false };
以上行为的原因是由于 rocksdb_block_size 设置为 4kb。由于数据块较小,压缩器发现要压缩的数据量较小。将它设置为 16kb 解决了这个问题。现在我得到了与 cassandra 相似的数据大小。
MyRocks (MySql) 和 Cassandra 都使用 LSM 架构来存储它们的数据。因此,我使用 MyRocks 作为存储引擎在 MySql 以及 Cassandra 中填充了大约 500 万行。在 Cassandra 中它只需要 1.7 GB 的磁盘 space 而在使用 MyRocks 作为存储引擎的 MySql 中,它需要 19 GB。
我错过了什么吗?两者使用相同的 LSM 机制。但为什么它们的数据大小不同?
更新:
估计跟text栏有关系。我的 Table 结构是 (bigint,bigint,varchar,text)。
- 填充的行数:300 000
- 在 MyRocks 中数据大小为 185MB
- 在 Cassandra 中 - 13 MB。
但如果我删除文本列,那么:
- MyRocks - 21.6 MB
- 卡桑德拉 - 11 MB
对这种行为有什么想法吗?
MyRocks 并非 100%。但 Cassandra 是 LSM,也是 Key value store。这意味着如果您的列是 'null',它将不会存储在磁盘上。传统上,RDBMS 仍会消耗一些 space(varchars、空字符指针等),因此这可能会导致您丢失 space.
另外cassandra压缩数据。尝试:
ALTER myTable WITH compression = { 'enabled' : false };
以上行为的原因是由于 rocksdb_block_size 设置为 4kb。由于数据块较小,压缩器发现要压缩的数据量较小。将它设置为 16kb 解决了这个问题。现在我得到了与 cassandra 相似的数据大小。