ElasticSearch和MongoDB的对比
<p> MongoDB 是一个典型的NoSQL(not only sql)数据库是开源的面向文档的数据库管理系统,主要实现NoSQL数据库管理系统,用于存储海量数据(humongous,Mongo名称的由来)。。</p><p> ElasticSearch是基于Apache Lucene 的RESTful 实时搜索和分析引擎。ES基于数据抽取一些值,提供实时存储、索引、搜索和分析数据功能,这些数据收集自其他数据源(包括MongoDB),可以直接存储在Elasticsearch集群中。 </p>
<p><strong>一、共同点:</strong><br> 面向文档存储,无Schema,分布式数据存储,高可用性,分片和复制等。虽然使用ElasticSearch作为主数据存储是可行的,但一般做为主数据库的辅助数据库。</p>
<p><strong>二、不同点:</strong></p>
<p style="margin-left: 30px">1、Elasticsearch是java编写,通过RESTFul接口操作数据。MongoDB是C++编写,通过driver操作数据。 </p>
<p style="margin-left: 30px">2、MongoDB的分片有hash和range两种方式,Elasticsearch只有hash一种。</p>
<p style="margin-left: 30px">3、Elasticsearch是天生分布式,主副分片自动分配和复制,开箱即用。MongoDB的分布式是由“前置查询路由+配置服务+shard集合”,需要手动配置集群服务。</p>
<p style="margin-left: 30px">4、内部存储ES是倒排索引+docvalues+fielddata。</p>
<p style="margin-left: 30px">5、Elasticsearch全文检索有强大的分析器且可以灵活组合,查询时智能匹配。MongoDB的全文检索字段个数有限制。</p>
<p style="margin-left: 30px">6、Elasticsearch所有字段自动索引,MongoDB的字段需要手动索引。Elasticsearch 使用 Apache Lucene 实现索引,而 MongoDB 索引是基于传统的B+ 树结构。Elasticsearch利用Lucene实现实时索引和搜索功能,默认支持在文档的每个字段上创建索引。而 MongoDB,我们必须定义索引用于提升查询性能,但会影响写操作。</p>
<p style="margin-left: 30px">7、Elasticsearch非实时有数据丢失窗口。mongodb实时理论上无数据丢失风险。</p>
<p style="margin-left: 30px">8、文档 - Elasticsearch 存储 JSON 文档, MongoDB 采用BSON格式存储 (Binary JSON)。</p>
<p style="margin-left: 30px">9、REST 接口 - Elasticsearch 提供 RESTful接口,MongoDB 不提供 RESTful接口。</p>
<p style="margin-left: 30px">10、MapReduce - MongoDB 支持 MapReduce 数据操作。 Elasticsearch 不支持 MapReduce。</p>
<p><strong>三、使用场景:</strong></p>
<p> MongoDB是通用功能的非RESTful风格的 NoSQL 数据库. 文档以 BSON 格式存储,主要用于存储数据。</p>
<p> Elasticsearch 是分布式全文检索引擎,可以提供实时Restful风格API处理海量面向文档的数据。文档使用JSON格式,主要用于基于文本的数据搜索。</p>
<p> 在实际应用中两者通常同时使用,Elasticsearch一般不作为主存储数据库,而是和SQL & NoSQL数据库一起使用,作为辅助数据库。</p>
<p> 与MongoDb不同, Elasticsearch 默认没有提供安全特性,如认证和授权。Elasticsearch和 Logstash & Kibana 一起称为ELK stack,用于快速查询数据并可视化展现分析数据。</p>
<p>Elasticsearch 非常适合需要基于文本进行快速索引然后进行检索,其查询速度非常快,大多数情况速度最多几十毫秒。</p>
<p> 因此,Elasticsearch 通常作为主数据库存储的辅助存储库。一般数据库系统更聚焦于约束、准确性和健壮性。当主记录在事务中更新时,其会同时被推送至Elasticsearch中。</p>
<p>一般典型使用PostgreSQL 和 ZooKeeper 负责数据的存储, 同时提供给Elasticsearch实现实时检索。</p>
<p> 没有万能的产品,没有所谓的银弹,没有一个数据库可以满足所有需求。所以我们需要了解不同数据库的优势和劣势,并选择合适的产品用于特定的需求。<br><br></p><br><br>
来源:https://www.cnblogs.com/xuzhujack/p/15798610.html
頁:
[1]