一个同时使用弹性搜索和mysql的应用程序

时间:2016-07-25 20:19:24

标签: php mysql elasticsearch

我正在撰写一个提供搜索功能的分类广告网站。根据我的经验,我一直依赖mySQL作为数据存储,因此使用Elastic Search进行开发对我来说是新的。

我可以看到三个选项:

  • 在我的应用中使用Elastic Search作为唯一存储(有doctrine ES扩展)并让它存储所有内容 - 用户,权限,活动日志等等

  • 使用MySQL并仅存储已分类的ID,并分别从ES中提取所有数据

  • 在MySQL和弹性搜索中复制数据

通常采取什么方法?

2 个答案:

答案 0 :(得分:1)

我的建议是坚持使用mysql作为主存储,并利用触发器的强大功能来处理后台作业并维护mysql和elastic之间的同步数据。我建议不要使用elastic-mongo组合,因为没有官方连接器在那里。

将mysql作为主存储器还可以确保为您提供数据备份,以防群集发生任何灾难。 确保维护正确的队列大小,以便批量索引到群集。

如果您没有搜索以外的任何内容并在S3或文件系统上保留,则保持弹性仅作为主存储。

答案 1 :(得分:-1)

ES几乎是实时存储,因此您无法替换实时存储引擎。对于生产,Elasticsearch集群应至少具有3个符合主节点的节点。

同时将MySql与ES同步可能会变得很麻烦。 我建议你尝试一下MongoDB,当数据库发生变化时,Mongo2ES连接器可以自动将数据复制到ES。

最后,您可以混合使用Mysql,MongoDB和ElasticSearch

  1. 用户,权限,活动日志的Mysql
  2. MongoDB永久分类丰富数据
  3. 用于快速搜索分类丰富数据的ES