每个消息来源都告诉我,在 cassandra 中支持复杂查询很复杂,您通常需要创建一个新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
列族中获取标签 id,然后通过查询获取 book_id 的列表BookTag
,然后使用这些 id 进行查询Book
。就像在普通的关系数据库中一样。
这些解决方案有什么缺点?