Cassandra:哪个是手动索引的最佳选择

时间:2013-01-15 16:36:57

标签: indexing cassandra manual

首先,请原谅我的英语。这不是我的母语。我正在努力将SQL数据库移动到Cassandra,但我有一个问题,我无法解决。假设我有一个存储歌曲的SQL表。每首歌都有一个ID作为主键,允许访问其所有相关数据,这些数据存储在键给出的行的字段中。我还有一些索引可以使用一些不同的标准作为作者,性别,标题...

当我考虑将其转移到Cassandra架构时,我会想到我可以创建一个等效的列族,其中歌曲ID是行键,歌曲属性是列。然后,我可以创建5或6个手动索引,按作者,标题,性别等进行搜索。作者,标题...将是列键(添加一些额外的数据以使它们保持唯一,使用复合列名称),该值将是用于在静态列族中搜索的歌曲ID,其中每一行由歌曲ID。

但我在这里似乎是我的怀疑。什么是更好的:每个索引CF只存储ID或存储所有属性?第一个选项允许我减少必要的内存量,但我需要(至少)2次读取才能获得每首歌曲的属性。使用第二个选项我需要更多内存,因为每个索引重复一次相同的信息,但在一次读取中我可以获得所需的所有属性。我想我可以假设需要额外的内存,如果这将是一个更快的架构,但是,它会真的更快?拥有更大的数据库不会让它运行得更慢?或者较慢的操作是搜索索引CF给出的每一行,因为Cassandra存储行的方式和2次读取?

另一个细节:我已经计算出使用第二个选项(将所有属性存储在CF中作为“索引”)我需要比使用第一个选项多80%的内存(CF实际上用作索引来查找歌曲“主要”CF中的正确数据。

非常感谢任何帮助。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您还需要查看宽行模式。像PlayOrm这样的一些库为你做了模式,所以你可以做一些像Scalable SQL(即带分区)的东西。您可以拥有任意数量的分区。我相信将来会有越来越多的NoSql对象映射库... PlayOrm的wiki上也有一个模式页面,它有noSql模式和PlayOrm模式....你可能想要检查nosql的模式