ES和MongDB的区别与异同
ElasticSearch 与 NoSQL 数据库差异
本⽂探讨下ElasticSearch 与 NoSQL 数据库差异,主要以MongoDB作为NoSql代表。
MongoDB 是开源的⾯向⽂档的数据库管理系统。ElasticSearch是基于Apache Lucene 的RESTful 实时搜索和分析引擎。
共有特性
⼀些特性是两者共有的,如⾯向⽂档存储,⽆Schema,分布式数据存储,⾼可⽤性,分⽚和复制等。虽然使⽤ElasticSearch作为主数据存储是可⾏的,但具体需求场景是决定选择哪个产品的关键。
发展历程
如果了解两个产品的发展历程,你将了解它们分别的应⽤场景。
MongoDB主要实现NoSQL数据库管理系统,⽤于存储海量数据(humongous,Mongo名称的由来)。另⼀⽅⾯,Elasticsearch基于数据抽取⼀些值,提供实时存储、索引、搜索和分析数据功能。这些数据收集⾃其他数据源(包括MongoDB),可以直接存储在Elasticsearch集群中。
两者差异
下⾯是两者之间的⼀些差异:
索引 - Elasticsearch 使⽤ Apache Lucene 实现索引,⽽ MongoDB 索引是基于传统的B+ 树结构. Elasticsearch利⽤Lucene实现实时索引和搜索功能,默认⽀持在⽂档的每个字段上创建索引。⽽ MongoDB,我们必须定义索引⽤于提升查询性能,但会影响写操作。实现语⾔ - Elasticsearch 采⽤ Java语⾔编写, ⽽ MongoDB 是 C++语⾔实现。
⽂档 - Elasticsearch 存储 JSON ⽂档, MongoDB 采⽤BSON格式存储 (Binary JSON).REST 接⼝ - Elasticsearch 提供 RESTful接⼝. MongoDB 不提供 RESTful接⼝.
MapReduce - MongoDB ⽀持 MapReduce 数据操作。 Elasticsearch 不⽀持 MapReduce.两者之间⾸要差异为:
MongoDB是通⽤功能的⾮RESTful风格的 NoSQL 数据库. ⽂档以 BSON 格式存储,主要⽤于存储数据。
Elasticsearch 是分布式全⽂检索引擎,可以提供实时Restful风格API处理海量⾯向⽂档的数据。⽂档使⽤JSON格式,主要⽤于基于⽂本的数据搜索。
同时使⽤
很难对两者进⾏⽐较,实际应⽤中两者通常同时使⽤。
Elasticsearch⼀般不作为主存储数据库,⽽是和SQL & NoSQL数据库⼀起使⽤,作为辅助数据库。
与MongoDb不同, Elasticsearch 默认没有提供安全特性,如认证和授权。Elasticsearch和 Logstash & Kibana ⼀起称为ELK stack,⽤于快速查询数据并可视化展现分析数据。
Elasticsearch ⾮常适合需要基于⽂本进⾏快速索引然后进⾏检索,其查询速度⾮常快,⼤多数情况速度最多⼏⼗毫秒。
总结
Elasticsearch 通常作为主数据库存储的辅助存储库。⼀般数据库系统更聚焦于约束、准确性和健壮性。当主记录在事务中更新时,其会同时被推送⾄Elasticsearch中.
⼀般典型使⽤PostgreSQL 和 ZooKeeper 负责数据的存储, 同时提供给Elasticsearch实现实时检索。