Кассандра: Семейства столбцов для сложных запросов?
Каждый источник говорит мне, что поддержка сложных запросов в Кассандре сложна, и вам обычно нужно создавать новые Column Family
для поддержки конкретных запросов (например, JOINS в реляционной базе данных).
Я не понимаю, зачем вам на самом деле нужно другое семейство столбцов для запроса.
Пример этого был продемонстрирован IBM здесь: http://www.ibm.com/developerworks/library/os-apache-cassandra/
Система имеет Books
со следующими столбцами: Author
,Price
, tag1
, tag2
, tag..
,
Если я хочу выполнить запрос типа "Получить всех авторов, которые написали книги с тегом sci-fi", они рекомендуют создать семейство столбцов под названием TagsToAuthor
, Зачем это нужно? Я считаю, что вы можете сделать следующие 2 решения без создания нового семейства столбцов:
- Создать
Tag
семейство столбцов, с столбцами:Book1
,Book2
,Book...
,Author1
,Author2
,Author...
- Создать
Tag
семейство колонок и создатьBookTag
семейство столбцов, содержащее столбцы:book_id
&tag_id
, Хотя Cassandra не имеет функции соединения, вы можете просто получить идентификатор тега изTag
семейство столбцов, а затем получить список book_id, выполнив запросBookTag
затем использовать эти идентификаторы для запросаBook
, Как в обычной реляционной базе данных.
Каковы недостатки этих решений?