我正在使用DSE进行Cassandra/Solr集成,以便数据存储在Cassandra中并在Solr中进行索引。使用Cassandra处理CRUD操作并分别使用Solr进行全文搜索非常自然,而DSE确实可以简化Cassandra和Solr之间的数据同步。
然而,在查询方面,实际上有两种方法可供选择:Cassandra二级/手动配置索引与Solr。我想知道何时使用哪种方法,以及一般情况下性能差异如何,特别是在DSE设置下。
以下是我的项目中的一个示例用例。我有一个Cassandra表,存储一些项目实体数据。除了基本的CRUD操作外,我还需要通过某个字段(例如类别)的相等性检索项目,然后按某个顺序排序(在这种情况下是一个like_count字段)。
我可以想到三种不同的处理方式:
1. 在Solr模式中为类别和like_count字段声明“索引=true”,然后在Solr中查询。 2. 创建一个反规范化表,在Cassandra中具有主键(类别、like_count、id) 3. 创建一个反规范化表,在Cassandra中具有主键(类别、顺序、id),并使用外部组件(如Spark/Storm)按like_count对项目进行排序
第一种方法似乎是实现和维护最简单的方法。我只需编写一些微不足道的Solr访问代码,其余的繁重工作将由Solr/DSE搜索处理。
第二种方法需要手动反规范化创建和更新。我还需要维护一个单独的表。如果有过多的删除标记,则可能会出现墓碑问题。好处在于读取可能更快(如果没有过多的删除标记)。
第三种方法可以减轻墓碑问题,代价是需要额外的排序组件。
你认为哪种方法是最佳选择?性能上有什么区别?
然而,在查询方面,实际上有两种方法可供选择:Cassandra二级/手动配置索引与Solr。我想知道何时使用哪种方法,以及一般情况下性能差异如何,特别是在DSE设置下。
以下是我的项目中的一个示例用例。我有一个Cassandra表,存储一些项目实体数据。除了基本的CRUD操作外,我还需要通过某个字段(例如类别)的相等性检索项目,然后按某个顺序排序(在这种情况下是一个like_count字段)。
我可以想到三种不同的处理方式:
1. 在Solr模式中为类别和like_count字段声明“索引=true”,然后在Solr中查询。 2. 创建一个反规范化表,在Cassandra中具有主键(类别、like_count、id) 3. 创建一个反规范化表,在Cassandra中具有主键(类别、顺序、id),并使用外部组件(如Spark/Storm)按like_count对项目进行排序
第一种方法似乎是实现和维护最简单的方法。我只需编写一些微不足道的Solr访问代码,其余的繁重工作将由Solr/DSE搜索处理。
第二种方法需要手动反规范化创建和更新。我还需要维护一个单独的表。如果有过多的删除标记,则可能会出现墓碑问题。好处在于读取可能更快(如果没有过多的删除标记)。
第三种方法可以减轻墓碑问题,代价是需要额外的排序组件。
你认为哪种方法是最佳选择?性能上有什么区别?