Хорошая ли идея в Кассандре хранить 86 тысяч суперколонок (по 1-10 маленьких колонок в каждой строке)?
tldr: ~90000 супер-столбцов с 1-10 столбцами в каждом ряду слишком много? Как насчет ~1500? Значения столбца составляют около 6 байтов каждое.
полный вопрос:
Я исследую различные хранилища данных для данных временных рядов. Колонно-ориентированные базы данных, такие как Cassandra и HBase, выглядят очень хорошо.
Требования состоят в том, чтобы хранить миллионы серий данных с минимальным интервалом в 1 минуту. В идеале мы могли бы поддерживать 1-секундный интервал, если этого требуют потребности бизнеса (возможно, они захотят).
Советы, предлагаемые в этом блоге, а также используемые OpenTSDB, имеют массу смысла.
По сути, ключи - это идентификаторы серии, соединенные с первой отметкой времени дня, столбцы создаются для каждого измерения в дне. Это около 86400 столбцов в строке.
Однако неизменность / версионность данных довольно важна. Бизнес-потребности диктуют возможность обновления значений серий, сохраняя при этом полную историю данных.
Изучение суперколонок Cassandra для предоставления другого измерения с целью версионирования значений приводит к 86400 суперколонкам. Каждый суперколонка будет содержать один столбец при первом создании значения (возможно, TimeUUID), а затем будет добавляться еще один столбец при каждом "обновлении". Обновления будут происходить регулярно для ограниченных подмножеств ряда и значений. В идеальных условиях обновлений не будет. В идеале это означает, что каждый суперстолбец не имеет огромного количества данных для загрузки, и большая часть доступа будет иметь только самое последнее значение.
Итак, чтобы вернуться к вопросу:
Есть ли проблема с производительностью или проблема, над которой я перебираю использование такого количества (86 КБ) супер-столбцов в строке?
1 ответ
Консервативно принимает 100K суперколонок и 1K на суперколонку, что составляет 100 МБ на строку, что вполне в пределах возможностей Cassandra.
Еще один фактор, который вы должны учитывать, это количество строк. "Одна большая строка" - плохая модель данных, поскольку строка является единицей разбиения. Пока у вас намного больше строк, чем у вас есть узлов, у вас все будет хорошо.