【问题标题】:Solr vs. MySQL performance for autocompleteSolr 与 MySQL 的自动完成性能对比
【发布时间】:2011-09-04 15:52:45
【问题描述】:

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

我们提出的最初解决方案是将 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 提供类似 [to MySQL] 的环境。
  2. 设计此系统。

感谢任何线索。

[1] SELECT column FROM table WHERE column LIKE 'USER-INPUT%' 在 MySQL 上,column:"USER-INPUT" 在 Solr 上。

【问题讨论】:

    标签: mysql sql performance solr benchmarking


    【解决方案1】:

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

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

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

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

    为了速度和可扩展性,我建议尽可能使用 Solr。

    【讨论】:

    • 听起来不错。我是 Solr 的新手,你能在表上做 JOIN 和 GROUP BY 吗?我们在这个表中的数据大约是 500 万条记录。你还会建议使用 Solr 吗?谢谢!
    • Solr 有一个松散的模式,所以一切都存储在一个单一的表中。每个 solr core(index) 对应一个数据库,而不是一个表。至于“GROUP BY”请查分面。 wiki.apache.org/solr/SolrFacetingOverview.
    • @parsa solr 可以容纳大量数据集。没有连接的概念。本质上,您索引 solr“文档”(只是一堆字段/值对),因此尽可能多地进行非规范化,以便您需要渲染的所有内容都保存在文档中。不用担心文档太大或重复数据 - 一切都与速度有关!
    猜你喜欢
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2017-09-19
    • 2014-01-30
    • 1970-01-01
    • 2014-12-05
    相关资源
    最近更新 更多