【问题标题】:Should I use Elastic Search as my data store instead of MySQL?我应该使用 Elastic Search 而不是 MySQL 作为我的数据存储吗?
【发布时间】:2014-12-02 01:50:18
【问题描述】:

我即将重建我的 Web 应用程序以使用弹性搜索而不是 mysql 来进行搜索,但我不确定具体该怎么做。

我看了一个 Laracon 视频,因为我的应用程序是基于 Laravel 4.2 构建的,我将使用这个包装器来查询:https://github.com/elasticsearch/elasticsearch

但是,我还是要使用 MySQL 数据库来存放数据,并让 ES 搜索它吗?还是有ES房子并查询数据更好。

如果我走第一条路线,我是否必须在两边都做 CRUD 操作以保持更新?

ES 可以处理 MySQL 可以处理的数据负载吗?意味着数亿行?

我只是在开始整个事情时非常小气。我可以使用一点方向,将不胜感激。除了 MySQL,我从未使用过任何搜索。

【问题讨论】:

  • 一个很好的 ES 用例是为数据存储创建一个索引的、可搜索的 JSON 前端。该后端数据存储可以是 MySQL,或日志文件,或其他任何东西。它可以使用分布式系统,但我认为这对于 Laravel 应用程序的后端来说有点矫枉过正。
  • 我问的原因是因为数据库有数百万行,每天都会添加和删除数十万行,所以全文索引会变慢,我喜欢每天优化表,如果我使用弹性搜索我假设它不再是必要的,我可以让它运行所有的操作,而我不需要每天处理它。

标签: php mysql ubuntu nginx elasticsearch


【解决方案1】:

我建议保留 MySQL 作为记录系统,并从您的应用程序对 MySQL 执行所有 CRUD 操作。然后启动 ElasticSearch 机器并定期将数据从 MySQL 移动到 ElasticSearch(仅您需要搜索的数据)。

如果 ElasticSearch 出现故障,您只会失去搜索功能 - 您的主数据存储仍然可以。

ElasticSearch 可以配置为一个集群,并且可以扩展得非常大,因此它可以处理行数。

要将数据导入 Elastic,您可以做很多事情:

  1. 执行初始导入(非常慢,非常大),然后使用进程复制差异。您可能会考虑使用 Mule ESB 之类的东西来移动数据 (http://www.mulesoft.org/)。

  2. 当您从应用程序写入数据时,您可以向 MySQL 写入一次,也可以将相同的数据写入 Elastic。这在 Elastic 中提供了实时数据,但当然,如果第二次写入 Elastic 失败,那么您将丢失数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多