ElasticSearch是壹個基於Apache Lucene的RESTful實時搜索和分析引擎。ES基於數據提取壹些值,並提供數據的實時存儲、索引、搜索和分析功能。這些數據是從其他數據源(包括MongoDB)收集的,可以直接存儲在Elasticsearch集群中。
壹。* * *相似之處:
面向文檔存儲、無模式、分布式數據存儲、高可用性、碎片化和復制。雖然使用ElasticSearch作為主數據存儲是可行的,但它通常用作主數據庫的輔助數據庫。
二、差異:
1,Elasticsearch用java編寫,通過RESTFul接口操縱數據。MongoDB由C++編寫,通過驅動程序操作數據。
2.對MongoDB進行分片有兩種方法:哈希和範圍,而Elasticsearch只有壹種哈希。
3.Elasticsearch是自然分布的,主段和輔助段是自動分配和開箱即用復制的。MongoDB的分布由“預查詢路由+配置服務+分片集”組成,集群服務需要手動配置。
4.內存ES是倒排索引+文檔值+字段數據。
5.Elasticsearch全文檢索具有強大的分析器,可以在查詢時靈活組合並智能匹配。MongoDB中全文搜索字段的數量是有限的。
6.Elasticsearch的所有字段都是自動索引的,而MongoDB的字段需要手動索引。Elasticsearch使用Apache Lucene實現索引,而MongoDB索引基於傳統的B+樹結構。Elasticsearch使用Lucene實現實時索引和搜索功能,默認支持在文檔的每個字段上創建索引。而MongoDB,我們必須定義壹個索引來提高查詢性能,但它會影響寫操作。
7.Elasticsearch有壹個實時的數據丟失窗口。Mongodb沒有實時數據丟失的風險。
8.Document-Elasticsearch存儲JSON文檔,MongoDB以BSON格式(二進制JSON)存儲它們。
9.REST接口——elastic search提供了RESTful接口,而MongoDB沒有。
10和MapReduce-MongoDB支持MapReduce數據操作。Elasticsearch不支持MapReduce。
三、使用場景:
MongoDB是壹個通用的非RESTful NoSQL數據庫。文檔以BSON格式存儲,主要用於存儲數據。
Elasticsearch是壹個分布式全文檢索引擎,可以提供實時的Restful API來處理海量面向文檔的數據。該文檔使用JSON格式,主要用於基於文本的數據搜索。
在實際應用中,兩者通常同時使用。Elasticsearch壹般不作為主存儲數據庫使用,而是與SQL &;NoSQL數據庫作為輔助數據庫壹起使用。
與MongoDb不同,Elasticsearch默認情況下不提供身份驗證和授權等安全功能。Elasticsearch和log stash &;Kibana合稱為ELK stack,用於快速查詢數據和可視化呈現分析數據。
Elasticsearch非常適合基於文本的快速索引和檢索,其查詢速度非常快,在大多數情況下,速度最多為幾十毫秒。
因此,Elasticsearch通常用作主數據庫存儲的輔助存儲庫。壹般的數據庫系統更關註約束、準確性和健壯性。當主記錄在交易中更新時,它也會被推送到Elasticsearch。
通常使用PostgreSQL和ZooKeeper存儲數據並提供給Elasticsearch進行實時檢索。
沒有通用的產品,也沒有數據庫可以滿足所有需求。因此,我們需要了解不同數據庫的優缺點,並根據具體需求選擇合適的產品。