Solr与MySQL在自动完成方面的性能比较

3
在我们的一个应用程序中,我们需要保存一些简单的表格数据,并且我们需要能够对其中一列执行用户端自动完成操作。
我们最初想到的解决方案是将MySQL与Solr相结合来实现这一点(MySQL用于保存数据,而Solr仅用于保存分词后的列并返回id作为结果)。但最近发生了一些不愉快的事情(开发人员开始将一些数据存储在Solr中,因为MySQL表和对其进行的操作都是Solr无法提供的),我们想也许我们可以将它们合并在一起并消除其中之一。
所以我们必须要么:(1)将所有数据移动到Solr中(2)使用MySQL进行自动补全
(1)听起来很糟糕,所以我尝试了(2),我从MySQL中加载了该列的数据,禁用了MySQL和Solr上的所有缓存,编写了一个微小的Web应用程序,能够在两个数据库上执行非常相似的查询[1],并在本地环境中启动了一些JMeter场景来测试两者。结果显示Solr具有2.5-3.5倍的优势,但我认为这些结果可能是完全错误的和容易出错的。
那么,您对以下问题有何建议:
1.正确地基准测试这两个系统,我认为您需要在JVM上提供与MySQL相似的环境。 2.设计这个系统。
感谢您提供任何线索。
[1] 在MySQL上使用 SELECT column FROM table WHERE column LIKE 'USER-INPUT%' ,在Solr上使用 column:"USER-INPUT"
1个回答

15

我最近将一个网站从数据库(postgres)转移到了Solr,所有数据都从Solr获取。速度的差异令人难以置信。我们还为澳大利亚郊区(约15K个)提供自动完成功能,并在几毫秒内找到它们,因此ajax自动完成(我们使用了jQuery)几乎立即响应。

所有更新都针对原始数据库进行,但我们的网站大多是阅读网站。我们使用触发器在记录更新时触发事件,这会生成记录的Solr重新索引。

另一个大的速度改进是预缓存渲染所需的数据-也就是说,我们在Solr索引时间解规范化数据并预先计算大量内容,因此Web开发人员可以轻松快速地进行渲染。

另一个优点是,如果需要将数据库脱机,我们可以将网站置于只读模式-我们只需回退到Solr。至少网站不会完全崩溃。

我建议尽可能多地使用Solr,以提高速度和可扩展性。


听起来不错。我对Solr还比较新,你能在表格上执行JOIN和GROUP BY操作吗?我们这个表格里的数据大约有500万条记录。你还会建议使用Solr吗?谢谢! - parsa
Solr具有松散的模式,因此一切都存储在单个表中。每个Solr核心(索引)对应一个数据库,而不是一个表。至于“GROUP BY”,请查阅facet。http://wiki.apache.org/solr/SolrFacetingOverview. - Jesvin Jose
2
@parsa Solr非常适合存储大型数据集。它没有联接的概念。基本上,您可以索引Solr“文档”(只是一堆字段/值对),因此尽可能地去规范化,以便保存文档中需要呈现的所有内容。不要担心文档过大或重复数据-这一切都与速度有关! - Bohemian

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