Solr与MySQL的自动完成性能

时间:2011-09-04 15:52:45

标签: mysql sql performance solr benchmarking

在我们的一个应用程序中,我们需要保存一些简单的表格数据,我们需要能够在其中一个列上执行用户端自动完成。

我们提出的初始解决方案是将MySQL与Solr连接起来实现这一目标(MySQL保存数据,Solr只保留标记化列并返回id作为结果)。但最近发生了一些不愉快的事情(开发人员开始在Solr中存储一些数据,因为MySQL表及其上所做的操作不是Solr无法提供的),我们认为也许我们可以将它们合并在一起并消除其中的一个。

所以我们不得不:(1)将所有数据移到Solr(2)使用MySQL进行自动完成

(1)听起来很可怕所以我用(2)给了它一个镜头,我开始将这个单列的数据加载到MySQL中,禁用了MySQL和Solr上的所有缓存,编写了一个能够执行非常相似的小型webapp在两个数据库上查询[1],并在本地和类似环境中针对这两种情况启动了一些JMeter方案。结果显示Solr有2.5-3.5倍的优势,但是,我认为结果可能完全错误且容易出错。

那么,你会建议:

  1. 正确地对这两个系统进行基准测试,我相信你需要 为JVM提供类似[MySQL]的环境。
  2. 设计此系统。
  3. 感谢任何线索。

    MySQL上的

    [1] SELECT column FROM table WHERE column LIKE 'USER-INPUT%'和Solr上的column:"USER-INPUT"

1 个答案:

答案 0 :(得分:15)

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

所有更新都是针对原始数据库完成的,但我们的网站是一个主要读取的网站。我们使用触发器在记录更新时触发事件,并将重新索引生成到记录的Solr中。

另一个很大的速度提升是预渲染项目所需的数据 - 即我们对数据进行非规范化并在Solr索引时预先计算大量内容,因此渲染对于网络人员来说非常容易并且速度非常快。

另一个优点是,如果由于某种原因需要使数据库脱机,我们可以将我们的站点置于只读模式 - 我们只是回到Solr。至少该网站没有完全失效。

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