在我们的一个应用程序中,我们需要保存一些简单的表格数据,我们需要能够在其中一个列上执行用户端自动完成。
我们提出的初始解决方案是将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倍的优势,但是,我认为结果可能完全错误且容易出错。
那么,你会建议:
感谢任何线索。
MySQL上的 [1] SELECT column FROM table WHERE column LIKE 'USER-INPUT%'
和Solr上的column:"USER-INPUT"
。
答案 0 :(得分:15)
我最近移动了一个网站,从数据库(postgres)获取数据,从Solr获取所有数据。速度令人难以置信的差异。我们还有澳大利亚郊区的自动完成(大约15K)并且它在几毫秒内找到它们,所以ajax自动完成(我们使用jQuery)几乎立即做出反应。
所有更新都是针对原始数据库完成的,但我们的网站是一个主要读取的网站。我们使用触发器在记录更新时触发事件,并将重新索引生成到记录的Solr中。
另一个很大的速度提升是预渲染项目所需的数据 - 即我们对数据进行非规范化并在Solr索引时预先计算大量内容,因此渲染对于网络人员来说非常容易并且速度非常快。
另一个优点是,如果由于某种原因需要使数据库脱机,我们可以将我们的站点置于只读模式 - 我们只是回到Solr。至少该网站没有完全失效。
我建议尽可能使用Solr,以提高速度和可扩展性。