每个消息来源都告诉我,在 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。就像在普通的关系数据库中一样。
这些解决方案有什么缺点?