我正在使用DSE进行Cassandra / Solr集成,以便将数据存储在Cassandra中并在Solr中编制索引。使用Cassandra处理CRUD操作并分别使用Solr进行全文搜索是非常自然的,DSE可以真正简化Cassandra和Solr之间的数据同步。
然而,当涉及到查询时,实际上有两种方法:Cassandra辅助/手动配置索引与Solr。我想知道何时使用哪种方法以及通常的性能差异,特别是在DSE设置下。
这是我项目中的一个示例用例。我有一个存储一些项目实体数据的Cassandra表。除了基本的CRUD操作,我还需要在某个字段(比如类别)上按等号检索项目,然后按某种顺序排序(在我的例子中,这是一个like_count字段)。
我可以想到三种不同的方法来处理它:
第一种方法似乎是最简单的实现和维护方法。我只是写一些简单的Solr访问代码,其余繁重的工作由Solr / DSE搜索处理。
第二种方法需要在创建和更新时进行手动非规范化。我还需要维护一个单独的表。还有墓碑问题,因为like_count可能会经常更新。好的部分是读取可能更快(如果没有过多的墓碑)。
第三种方法可以以一个额外组件的成本来减轻逻辑删除问题。
您认为哪种方法是最佳选择?性能有何不同?
答案 0 :(得分:24)
Cassandra二级索引的用例有限:
由于这些限制,应用程序通常会创建"索引表"它们被所需的任何列索引。这要求将数据从主表复制到每个索引表,或者需要额外的查询来读取索引表,然后在从索引表中读取主键后从主表中读取实际行。必须事先手动索引多列上的查询,这使得即席查询有问题。任何重复的内容都必须由应用程序手动更新到每个索引表中。
除此之外......在适度的情况下,它们会正常工作。将从适度数量的节点中选择行数,并且事先很好地指定查询,而不是临时的。
DSE / Solr更适合:
使用Solr索引会产生性能和容量成本,因此建议使用概念验证来评估需要多少额外的RAM,存储和节点,这取决于您索引的列数,文本量索引,以及任何文本过滤复杂性(例如,n-gram需要更多。)对于相对较少数量的索引列,其范围可以从25%增加到如果所有列都被索引的100%。此外,您需要有足够的节点,以便每个节点的Solr索引适合RAM,或者如果使用SSD,则大部分位于RAM中。目前,Solr数据中心不建议使用vnode。