RocksDB против Кассандры
И MyRocks (MySql), и Cassandra используют архитектуру LSM для хранения своих данных. Таким образом, в MySql я заполнил около 5 миллионов строк с MyRocks в качестве механизма хранения, а также в Cassandra. В Cassandra он занимает всего 1,7 ГБ дискового пространства, а в MySql с MyRocks в качестве механизма хранения - 19 ГБ.
Я что-то пропустил? Оба используют один и тот же механизм LSM. Но почему они различаются по размеру данных?
Обновить:
Я думаю, это как-то связано с текстовым столбцом. Моя структура таблицы (bigint,bigint,varchar, текст).
- Населенных рядов: 300 000
- В MyRocks размер данных 185МБ
- На Кассандре - 13 МБ.
Но если я уберу текстовый столбец, тогда:
- MyRocks - 21,6 МБ
- Кассандра - 11 МБ
Есть идеи об этом поведении?
2 ответа
Ну, причина вышеупомянутого поведения заключается в том, что rocksdb_block_size имеет значение 4 КБ. Из-за меньшего количества данных черный компрессор находит меньшее количество данных для сжатия. Установка его в 16kb решает проблему. Теперь я получаю такой же размер данных, как и у кассандры.
Не 100% на MyRocks. Но Кассандра - это LSM, а также хранилище ключей. Это означает, что если ваш столбец равен нулю, он не будет сохранен на диске. Традиционно СУБД по-прежнему будет занимать некоторое пространство (varchars, указатели с нулевыми символами и т. Д.), Поэтому это может быть причиной вашего потерянного пространства.
Дополнительно Кассандра сжимает данные. Пытаться:ALTER myTable WITH compression = { 'enabled' : false };