Solr与MySQL的自动完成性能

par*_*rsa 3 mysql sql performance benchmarking solr

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

我们提出的初始解决方案是将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. 设计这个系统.

感谢任何线索.

SELECT column FROM table WHERE column LIKE 'USER-INPUT%'关于MySQL和column:"USER-INPUT"Solr的[1] .

Boh*_*ian 15

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

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

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

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

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

  • @parsa solr可以容纳大量数据集.没有连接的概念.从本质上讲,您索引solr"documents"(只是一堆字段/值对),因此可以根据需要进行非规范化,因此您需要渲染的所有内容都保存在文档中.不要担心文件太大或重复数据 - 这都与速度有关! (2认同)