ElasticSearch Mongo MySQL文档存储及检索对比。
测试环境:
- 硬件配置:2核2G内存
- 部署方式:Docker
- CentOS 8.4
- PHP 7.4.23
- MySQL8使用的是Ngram全文检索解析器
- 数据量:2.6万个文档,大小总计430M。
由于数据量、环境及所使用语言的限制,结果仅供参考。
对比项目 | Mongo | MySQL | ElasticSearch |
---|---|---|---|
版本 | 4.4.6 | 8.0.26 | 7.14.1 |
配置复杂度(越低越好) | 6 | 2 | 4 |
PHP扩展 | 需要 | 不需要 | 不需要 |
composer | 支持 | 支持 | 支持 |
语法友好度(越高越好) | 4 | 10(Ngram解析器,原生SQL) | 8 |
默认单字/词查询 | 是 | 否 | 是 |
分页查询 | 支持 | 支持 | 支持 |
复杂查询 | 支持度低 | 支持度不高 | 支持 |
结果相似度打分 | 不支持 | 支持 | 支持 |
局部update | 支持 | 支持(不存在该问题) | 不支持 |
数据写入耗时 | 335秒 | 前期较快,1万条后明显卡顿,未实际完成 | 248秒 |
综合以上,ElasticSearch胜出,MySQL甚至不能在一小时内写入几百兆的文本数据也是出乎意料的。
最终方案:关系型数据使用MySQL,需要全文检索的数据同步到ElasticSearch中。