ElasticSearch與MongoDB差異

MongoDB是面向文檔的數據庫管理系統,ElasticSearch是基于Apache Lucene的Restful實時搜索和分析引擎。

1. 共同點

一些特性是兩者共有的,比如面向文檔存儲、無Schema、分布式數據存儲、高可用性、分片和復制等。雖然ElasticSearch作為數據存儲是可行的,但具體場景是決定選型的關鍵。

2. 發展歷程

MongoDB主要實現NoSQL數據庫管理系統,用于存儲海量數據(humongous)。另一方面,ElasticSearch基于數據抽取一些值,提供實時存儲、索引、搜索和分析數據功能。這些數據收集自其他數據源(MySQL、文本、Redis等),可以直接存儲在ElasticSearch集群中。

3. 差異性

  1. 索引:
    ElasticSearch使用Apache Lucene實現索引,而MongoDB索引基于傳統的B+樹結構。ElasticSearch利用Lucene實現實時索引和搜索功能,默認支持在文檔的每個字段上創建索引。而MongoDB,則必須定義索引用于提升查詢性能,但是會影響寫入效率;
  2. 實現語言:
    ElasticSearch采用Java語言編寫,MongoDB是C++實現的;
  3. 文檔:
    ElasticSearch存儲Json文檔,MongoDB采用Bson格式存儲(Binary Json);
  4. Rest接口:
    ElasticSearch提供Restful接口,MongoDB不提供;
  5. 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中.

和其他技術一樣,沒有銀彈。沒有一個數據庫可以滿足所有需求。所以我們需要了解不同數據庫的優勢和劣勢,并選擇合適的產品用于特定的需求。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容