MongoDB是面向文檔的數據庫管理系統,ElasticSearch是基于Apache Lucene的Restful實時搜索和分析引擎。
1. 共同點
一些特性是兩者共有的,比如面向文檔存儲、無Schema、分布式數據存儲、高可用性、分片和復制等。雖然ElasticSearch作為數據存儲是可行的,但具體場景是決定選型的關鍵。
2. 發展歷程
MongoDB主要實現NoSQL數據庫管理系統,用于存儲海量數據(humongous)。另一方面,ElasticSearch基于數據抽取一些值,提供實時存儲、索引、搜索和分析數據功能。這些數據收集自其他數據源(MySQL、文本、Redis等),可以直接存儲在ElasticSearch集群中。
3. 差異性
- 索引:
ElasticSearch使用Apache Lucene實現索引,而MongoDB索引基于傳統的B+樹結構。ElasticSearch利用Lucene實現實時索引和搜索功能,默認支持在文檔的每個字段上創建索引。而MongoDB,則必須定義索引用于提升查詢性能,但是會影響寫入效率; - 實現語言:
ElasticSearch采用Java語言編寫,MongoDB是C++實現的; - 文檔:
ElasticSearch存儲Json文檔,MongoDB采用Bson格式存儲(Binary Json); - Rest接口:
ElasticSearch提供Restful接口,MongoDB不提供; - MapReduce:
MongoDB支持MapReduce數據操作,ElasticSearch不支持。
兩者的首要差異
- MongoDB是通用功能的非Restful風格的NoSQL數據庫,文檔以Bson格式存儲,主要用于數據存儲;
- ElasticSearch是分布式全文檢索引擎,可以提供實時Restful風格API處理海量面向文檔的數據。文檔采用Json風格,主要用于基于文本的數據搜索。
4. 同時使用
很難對兩者進行比較,實際應用中兩者通常同時使用。
Elasticsearch一般不作為主存儲數據庫,而是和SQL & NoSQL數據庫一起使用,作為輔助數據庫。
與MongoDB不同, Elasticsearch 默認沒有提供安全特性,如認證和授權(6.8之后,xpack部分開源功能可支持)。Elasticsearch和 Logstash & Kibana 一起稱為ELK stack,用于快速查詢數據并可視化展現分析數據。
Elasticsearch 非常適合需要基于文本進行快速索引然后進行檢索,其查詢速度非常快,大多數情況速度最多幾十毫秒。
5. 總結
Elasticsearch 通常作為主數據庫存儲的輔助存儲庫。一般數據庫系統更聚焦于約束、準確性和健壯性。當主記錄在事務中更新時,其會同時被推送至Elasticsearch中.
和其他技術一樣,沒有銀彈。沒有一個數據庫可以滿足所有需求。所以我們需要了解不同數據庫的優勢和劣勢,并選擇合適的產品用于特定的需求。