ElasticSearch和MongoDB的對比


    MongoDB 是一個典型的NoSQL(not only sql)數據庫是開源的面向文檔的數據庫管理系統,主要實現NoSQL數據庫管理系統,用於存儲海量數據(humongous,Mongo名稱的由來)。。

    ElasticSearch是基於Apache Lucene 的RESTful 實時搜索和分析引擎。ES基於數據抽取一些值,提供實時存儲、索引、搜索和分析數據功能,這些數據收集自其他數據源(包括MongoDB),可以直接存儲在Elasticsearch集群中。 

一、共同點:
     面向文檔存儲,無Schema,分布式數據存儲,高可用性,分片和復制等。雖然使用ElasticSearch作為主數據存儲是可行的,但一般做為主數據庫的輔助數據庫。

二、不同點:

1、Elasticsearch是java編寫,通過RESTFul接口操作數據。MongoDB是C++編寫,通過driver操作數據。 

2、MongoDB的分片有hash和range兩種方式,Elasticsearch只有hash一種。

3、Elasticsearch是天生分布式,主副分片自動分配和復制,開箱即用。MongoDB的分布式是由“前置查詢路由+配置服務+shard集合”,需要手動配置集群服務。

4、內部存儲ES是倒排索引+docvalues+fielddata。

5、Elasticsearch全文檢索有強大的分析器且可以靈活組合,查詢時智能匹配。MongoDB的全文檢索字段個數有限制。

6、Elasticsearch所有字段自動索引,MongoDB的字段需要手動索引。Elasticsearch 使用 Apache Lucene 實現索引,而 MongoDB 索引是基於傳統的B+ 樹結構。Elasticsearch利用Lucene實現實時索引和搜索功能,默認支持在文檔的每個字段上創建索引。而 MongoDB,我們必須定義索引用於提升查詢性能,但會影響寫操作。

7、Elasticsearch非實時有數據丟失窗口。mongodb實時理論上無數據丟失風險。

8、文檔 - Elasticsearch 存儲 JSON 文檔, MongoDB 采用BSON格式存儲 (Binary JSON)。

9、REST 接口 - Elasticsearch 提供 RESTful接口,MongoDB 不提供 RESTful接口。

10、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實現實時檢索。

      沒有萬能的產品,沒有所謂的銀彈,沒有一個數據庫可以滿足所有需求。所以我們需要了解不同數據庫的優勢和劣勢,並選擇合適的產品用於特定的需求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM