Cassandra还是SOLR?哪个对于前端读取查询性能更好?

16
我的团队要求我在前端查询速度方面选择Cassandra或SOLR。我告诉他们,Cassandra是NOSQL数据库,而SOLR则是索引工具。但是他们说可以将完整数据库推送到SOLR(就像使用SOLR作为数据库)或者只使用Cassandra和SOLR。这让我很困惑。
我们要处理的数据量大约有10亿条数据,分布在4个MySQL表中(通过连接获取),网站只有读取查询。我们不需要全文搜索。
我认为SOLR无法轻易击败的另一个方面是其全文搜索功能,但在我们的情况下,我们并不需要它。
那么SOLR还有什么优势是Cassandra无法提供的?Cassandra有哪些特点可以替代SOLR在我们的特定案例中?
换句话说,谁会表现更好?Cassandra单独使用?SOLR作为独立数据库?还是两者一起使用?最重要的是为什么和为什么不?
在我的下一个团队会议上,用强有力的观点支持我的选择非常重要。
编辑:
- SOLANDRA不是一个选项,因为它不够成熟,也不再维护。 - DataStax不是一个选项,因为SOLR功能仅在企业版中提供。

1
@Xodarap,这怎么会是个大问题呢?如果需要的话,您可以轻松地获得强一致性保证。您可以选择(每个操作)等待响应的副本数量:http://www.datastax.com/docs/1.0/dml/data_consistency - Tyler Hobbs
@Tyler:Facebook转向使用HBase 部分原因是因为其更简单的一致性模型,而我知道在Cassandra中增加一致性会导致延迟问题。我毫不怀疑这个问题可以解决,但值得考虑。 - Xodarap
4个回答

9
如果您不需要Solr的全文搜索功能,我认为选择Cassandra比Solr更好很多。
(披露:我在DataStax工作。)
从操作上来看,由于Dynamo架构,处理Cassandra群集要简单得多。将Solr分片可能会非常痛苦,这也是我们在DataStax中将搜索构建到DSE中的主要原因之一;这是许多人想要避免的事情。我并不是要向您推销DSE,只是指出Solr的缺点。
例如,当您想要改变Solr的分片数时,您必须创建和构建一个全新的索引。您必须担心Solr群集的死锁问题。还有其他几个限制:http://wiki.apache.org/solr/DistributedSearch 您还没有说过您需要支持哪种类型的查询。提供这些信息将使您获得更好的答案。

目前查询仅为读取查询,并使用4个MySQL表上的连接获取。如果您想了解有关查询性质的更多信息,请告诉我。因此,从您的输入中,我可以得出结论:如果我们的索引在单个系统上,并且我们不需要全文搜索功能,则SOLR和Cassandra的性能可能相同,但如果索引是分布式的,则最好使用Cassandra?即使在单台机器上,Cassandra的性能也会更好吗?如果是/否,则为什么? - codersofthedark
@dragosrsupercool,查询的性质肯定会很有帮助;细节越多越好。 - Tyler Hobbs

5
  • Cassandra是一种NoSQL数据存储系统,旨在处理海量数据。从Tera字节开始,甚至设计来进行高性能表现。
  • 请记住,NoSQL数据库或数据存储在查询方面的功能有限。它们没有连接查询,因为这会导致系统死机。想一想!
  • 您肯定能够快速读/写某些数据,并且可以查询其中的一些数据。
  • 灵活的模式,您可以将稀疏数据推入其中。也就是说,在一般的DB中,您要为一个空条目推送NULL,在此处根本不需要推送它:) 您不需要这样做!
  • 不能进行全文搜索。

这就是大但的出现之处。

  • 尽管您可以将其用于数据库,但SOLR另一端是TF-IDF全文搜索引擎。
  • 灵活的模式。只需标记不需要的字段即可。
  • Solr将帮助令数据快速进行分词、解析和索引。它的响应非常出色。它返回XML,您可以解析XML以创建可表示的数据。
  • 读取查询非常快,我的意思是真的很快。但我没有分享Cassandra和SOLR之间的比较。

最后,由于您想要CASSANDRA和SOLR一起使用。请查看SOLANDRA(前Lucandra)


2
Solr允许使用灵活的模式定义,包括动态字段 - Xodarap
1
@Wajih:同意,Cassandra可以处理大量数据,但是SOLR也可以做到这一点,我想它的扩展性也很好。如果我错了,请纠正我。此外,JOIN是SOLR和Cassandra都无法提供的功能。它们两者都提供了灵活的模式。SOLR具有高性能的全文搜索功能,但在我们特定的情况下不需要它。我们也不需要写操作。所以现在你说Cassandra的读取速度非常快,但是你又说SOLR也很快,那么问题仍然是什么使一个比另一个更好呢?:( - codersofthedark
我已经重新改写了问题,以更清晰地描述情况。 :) - codersofthedark
@Xodarap - 我本意是说稀疏数据。也许我需要详细阐述我的答案。 - user349026
@Xodarap - 嗯...我想我错过了这个重要的点。我会去看看的。你有其他链接吗?我是指除了Cassandra官方网站之外的链接。上次我使用SOLR时就遇到了这个问题。也许我做错了什么... - user349026
@Wajih:只需不将您的字段标记为必填项即可。例如,请参见SOLR-181 - Xodarap

4
您也可以查看Datastax,有社区版和企业版,但我认为Solr不包含在社区版中 :(
Solandra不再被积极开发了,作者转到Datastax并在那里继续他的工作。
在我看来,Cloudera对于Hadoop,Datastax对于Cassandra。

1
哦,是的...忘记了 DataStax。应该提到它 :) - user349026
@mbonaci:理解为什么我们需要同时使用它们以及信任Datastax / Solandra非常重要。我的意思是,Cassandra中有什么是SOLR无法提供的,反之亦然?我们不需要全文搜索。那么一个是否可以替换另一个? - codersofthedark
我已经重新改写了问题,以更清晰地描述情况。 :) - codersofthedark
抱歉,如果您不需要FT搜索,那么您根本不需要Solr(正如Tyler所说)。 Solr首先是搜索引擎,其次才是其他所有事情。然后,Datastax Cassandra社区版(没有Solr)就足以开始构建技术验证了。 - Marko Bonaci

2
Solr的索引功能在读取方面会优于Cassandra。它将索引热门查询,因此频繁查询将更快。它是为读取而构建的,而Cassandra则是为存储而构建的。但正如已经说明的那样,如果需要,Cassandra将非常适合扩展。为什么不进行基准测试,使用单个节点、100万个随机文本字符串和100万个平均查询。其中任何一个都将优于MySQL,更不用说MySQL联接查询了。PS:我认为Solr 4很快就会支持联接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接