Я новичок в cassandra, пытаясь понять, как я могу смоделировать наши текущие данные sql в cassandra. В базе данных хранятся метаданные документов, в том числе document_id, last_modified_time, size_in_bytes среди множества других данных, а количество документов может быть сколь угодно большим, поэтому мы ищем масштабируемое решение для хранения и запросов.
Требуется 2 запроса диапазона
- выберите все документы, где last_modified_time>=x и last_modified_time
- выберите все документы, где размер >= x и размер ‹= y
А также набор запросов, в которых документы должны быть сгруппированы по определенным метаданным, например.
- выбрать все документы, в которых пользователь находится (x, y, z)
Как лучше всего разрабатывать модель данных на основе этих запросов?
Моя первоначальная мысль заключалась в том, чтобы иметь таблицу (в Cassandra 2.0, CQL 3.0) с last_mod_time в качестве вторичного индекса следующим образом.
создать таблицу t_document (document_id bigint,
last_mod_time bigint, размер bigint, пользовательский текст, .... первичный ключ (document_id, last_mod_time) }
Это должно позаботиться о запросе 1.
Нужно ли мне создавать другую таблицу с первичным ключом (document_id, size) для запроса 2? Или я могу просто добавить размер в качестве третьего элемента в первичный ключ той же таблицы, например. (document_id, last_mod_time, размер). Но в этом случае второй запрос будет работать без использования last_mod_time в предложении where?
Для запроса 3, который представляет собой все документы для одного или нескольких пользователей, лучше всего создать таблицу t_user_doc, где первичный ключ (пользователь, doc_id)? Или лучше создать вторичный индекс для пользователя в той же таблице t_document?
Спасибо за любую помощь.