0x0. Elasticsearch vs Mongodb
1. 场景和目标
- Mongodb 的目标是:“取代 Oracle和 db2”(财务总监说的)。和 RDBMS 是竞争关系。
ES 的大部分场景是:“一个常见的设置是使用其它数据库作为主要的数据存储,使用 Elasticsearch 做数据检索”(官方文档里说的)。和 RDBMS 是辅助关系。
2. 相同点
都是以json 格式管理数据的 nosql 数据库。
- 都支持CRUD 操作。
- 都支持聚合和全文检索。
- 都支持分片和复制。
- 都支持阉割版的 join 操作。
- 都支持处理超大规模数据。
-
3. 不同点
ES 是 Java 编写,通过 RESTFul 接口操作数据。Mongodb 是 C++ 编写,通过 driver 操作数据。(ES 对 Java 开发更有好,利于排查理解)
- Mongodb 的分片有 hash 和 range 两种方式,ES 只有 hash 一种。
- ES 是天生分布式,主副分片自动分配和复制,开箱即用。Mongodb的分布式是由“前置查询路由 + 配置服务 + shard集合”,需要手动配置集群服务。
- 内部存储ES是倒排索引 + docvalues + fielddata。Mongodb 内部采用 B-Tree 作为索引结构,此索引基于最左优先原则,且必须保证查询顺序与索引字段的顺序一致才有效
- ES 全文检索有强大的分析器且可以灵活组合,查询时智能匹配。Mongodb 的全文检索字段个数有限制。
- ES 所有字段自动索引,Mongodb 的字段需要手动索引。
ES 非实时有数据丢失风险。Mongodb 实时理论上无数据丢失风险。
4. 总结
ES 偏向于检索、查询、数据分析,适用于 OLAP 系统。
- Mongodb 偏向于大数据规模下的 CRUD,适用于对事务要求不强的 OLTP 系统。
0x1. Elasticsearch vs Solr
1. 相同点
- 两者都是 Java 开发。
- 两者都是基于 Lucene 基础之上开发,一款优秀的,高性能的企业级搜索服务器。
是因为他们都是基于分词技术构建的倒排索引的方式进行查询
2. 不同点
- 当实时建立索引的时候,Solr 会产生 IO 阻塞,而 ES 则不会,ES 查询性能要高于 Solr。
- 在不断动态添加数据的时候,Solr 的检索效率会变的低下,而 ES 则没有什么变化。
- Solr 利用 Zookeeper 进行分布式管理,而 ES 自身带有分布式系统管理功能。Solr 一般都要部署到 Web 服务器上,比如 Tomcat。启动 Tomcat 的时候需要配置Tomcat 与 Solr 的关联,Solr 的本质是一个动态 Web 项目。
- Solr 支持更多的格式数据 xml、json、csv 等,而 ES 仅支持 Json 文件格式。
- Solr 是传统搜索应用的有力解决方案,但是 ES 更适用于新兴的实时搜索应用。
- 单纯的对已有数据进行检索的时候,Solr 效率更好,高于 ES。
- Solr 官网提供的功能更多,而 ES 本身更注重于核心功能,高级功能多有第三方插件。
- ES 使用范围更广,目前使用用户更多。
