Может ли Cassandra разбивать таблицы на основе даты/времени?

У меня есть очень большая таблица с множеством столбцов. Значения в некоторых столбцах меняются редко, и, поскольку хранить все эти данные в одной таблице плохо, я хотел бы разделить таблицу на множество таблиц на основе метки времени. То есть для одной метки времени делается одна таблица, при этом запрос ко всем этим таблицам должен давать абстракцию одной единственной таблицы. То есть запрос должен выполняться только для необходимых таблиц (на основе запроса временного диапазона) и все эти результаты должны быть объединены.

Таким образом, мне нужны две функции:

  • Автоматическая разреженная реализация
  • Хранение в виде нескольких таблиц на основе метки времени и абстракции попадания в одну таблицу

Какой инструмент лучше всего подходит для этой цели? Кассандра подойдет?


person Vineeth Mohan    schedule 30.01.2012    source источник
comment
Учитывая, что вы спрашиваете, какой инструмент/базу данных использовать, кажется преждевременным определять структуру вашей таблицы (тем более, что Cassandra не основана на таблицах). То, что вам, кажется, нужно, - это запросы на основе времени - достигается ли это с помощью нескольких таблиц или (что более вероятно) с помощью индексации на основе времени - это деталь реализации. Не могли бы вы дать более подробную информацию, пожалуйста - Насколько велик ваш стол? Сколько столбцов? В чем это реализовано на данный момент? В чем проблема с вашей текущей реализацией (т.е. почему вы считаете, что хранить данные в одной таблице «плохо»?)   -  person DNA    schedule 31.01.2012
comment
Мои данные будут около 2-3 ТБ. Должно быть не менее 10 столбцов. Я только собираюсь это реализовать. Я беспокоюсь, не пострадает ли производительность, если я буду хранить данные в одной таблице.   -  person Vineeth Mohan    schedule 31.01.2012


Ответы (1)


Обычные базы данных SQL, такие как PostgreSQL, могут обрабатывать несколько ТБ (максимальный теоретический размер таблицы — 32 ТБ). Некоторые из них могут обрабатывать гораздо большие объемы данных, хотя для этого обычно требуется разбиение данных на кластеры машин.

10 столбцов — это не так уж и много — PostgreSQL имеет максимум 250-16600 столбцов на таблицу в зависимости от типа столбца. Предусмотрено индексирование по времени, поэтому нет необходимости разделять по отметке времени, учитывая, что вам все еще нужно запрашивать данные (т. Е. Вы не архивируете старые данные).

Cassandra может обрабатывать гораздо большие объемы данных, но обычно нужно использовать несколько узлов в кластере для разделения нагрузки и обеспечения репликации. Типичный совет, по-видимому, состоит в том, чтобы использовать один узел на ТБ, если система сильно загружена чтением/записью, или больше (2-3 ТБ?), если она слабо загружена.

Cassandra не использует таблицы как таковые. У него есть семейства столбцов, которые содержат строки разреженных столбцов (до 2 миллиардов на строку). Опять же, в общем случае секционирование данных не требуется — вы можете хранить огромное количество строк в одном семействе столбцов (внутри они секционируются по вашим узлам, а затем секционируются в файлы, называемые SSTables).

Подходит ли Cassandra, в некоторой степени зависит от типов запросов, которые вы хотите сделать. Cassandra не предоставляет гибких SQL-запросов, поэтому вам необходимо структурировать данные в соответствии с запросами.

person DNA    schedule 31.01.2012