我刚刚开始研究Stratio,但是我对一些基本问题感到困惑:
我听说在Cassandra中使用二级索引是不建议的,但是看起来Stratio是基于Lucene的cassandra二级索引的实现。如果使用Stratio,是否需要降低Cassandra的性能?普通的CQL查询会有任何延迟吗?
内部如何索引数据?它会复制我现有的全部数据吗?
是否建议在生产中使用Stratio?它的稳定性如何?
为了查询非分区键或非群集键,我们可以通过创建二级索引来实现,即使使用Stratio,我感觉我们也在做同样的事情。 Stratio的自定义索引与Cassandras二级索引有什么真正的区别?
答案 0 :(得分:2)
我听说在cassandra中使用二级索引不是 值得一提,但看起来Stratio是基于lucene的实现 卡桑德拉的二级索引。我是否需要妥协性能 卡桑德拉的,如果我使用分层?正常的CQL是否会有任何延迟 查询?
Stratio的Cassandra Lucene索引只是Cassandra二级索引的另一种实现。使用Stratio的Cassandra Lucene索引,由于索引导致的性能损失可能不会再恶化。我所看到的优点是,与基于精确字段匹配的Cassandra默认索引解决方案相比,借助Stratio解决方案,您将获得Lucene接近实时的免费文本搜索功能。 在Cassandra lucene performance question和Stratio’s Cassandra Lucene Index GitHub
处了解更多它内部如何索引数据?它会复制我现有的全部吗 数据?
根据定义,索引不会复制数据。索引是一种反向查找。使用指向实际记录的指针来索引不同的字段。 (如书末尾的不同术语的索引)。 因此,如果您的记录中有一个存储“原产国”的字段,那么说您的记录中有50%会将那个国家/地区设置为美国,而另外50%会将其设置为加拿大。在索引中,美国将仅被存储一次,而加拿大将被存储一次,并且每个存储都引用一半的记录。这意味着索引字段的差异越大,数据所需的存储空间就越多。这也是Lucene很好地解决自由文本搜索的地方,方法是将文本标记为不同的单词,并对不同文本中每个单词的数量应用评分机制。此处更多内容:Full Text Search of Dialogues with Apache Lucene: A Tutorial Lucene Basic Concepts
建议在生产级别使用Stratio,它有多远 稳定吗?
这很难回答。这在很大程度上取决于您将在生产中使用什么以及如何使用它。我建议您去尝试一下概念验证/原型验证。
为了查询非分区或非集群键,我们可以实现 通过创建二级索引,即使使用Stratio我也觉得 我们也一样。 Stratios自定义索引与实际有何不同 卡桑德拉二级索引?
如上所述,Lucene擅长于自由文本搜索,它具有多种不同的查询类型,它既快速又灵活。另一方面,如果您的搜索要求仅限于几个完全匹配的字段,那么采用标准的Cassandra索引解决方案可能是解决之道。
祝你好运, Teo
答案 1 :(得分:0)
过去两年来,我们一直在生产中使用Stratio Cassandra Lucene插件。它的性能与您在Cassandra中使用任何其他二级索引时遇到的困难相同。对于需要较小延迟(<100毫秒)的用法,我们使用了自己的自定义表作为索引来利用快速主键查找来满足性能要求。我们仅对不需要快速响应时间的查询使用基于Straatio的索引(例如,基于用户/用户界面的搜索)。
我注意到Stratio Cassandra项目(https://github.com/Stratio/cassandra-lucene-index)已死,因为大约两年没有更新。因此,我们将计划逐步取消对此的使用。