我正在撰写一个提供搜索功能的分类广告网站。根据我的经验,我一直依赖mySQL作为数据存储,因此使用Elastic Search进行开发对我来说是新的。
我可以看到三个选项:
在我的应用中使用Elastic Search作为唯一存储(有doctrine ES扩展)并让它存储所有内容 - 用户,权限,活动日志等等
使用MySQL并仅存储已分类的ID,并分别从ES中提取所有数据
在MySQL和弹性搜索中复制数据
通常采取什么方法?
答案 0 :(得分:1)
我的建议是坚持使用mysql作为主存储,并利用触发器的强大功能来处理后台作业并维护mysql和elastic之间的同步数据。我建议不要使用elastic-mongo组合,因为没有官方连接器在那里。
将mysql作为主存储器还可以确保为您提供数据备份,以防群集发生任何灾难。 确保维护正确的队列大小,以便批量索引到群集。
如果您没有搜索以外的任何内容并在S3或文件系统上保留,则保持弹性仅作为主存储。
答案 1 :(得分:-1)
ES几乎是实时存储,因此您无法替换实时存储引擎。对于生产,Elasticsearch集群应至少具有3个符合主节点的节点。
同时将MySql与ES同步可能会变得很麻烦。 我建议你尝试一下MongoDB,当数据库发生变化时,Mongo2ES连接器可以自动将数据复制到ES。
最后,您可以混合使用Mysql,MongoDB和ElasticSearch