数据库选Mongo还是Elalsticsearch 10亿数据

名目启动,预估超越10亿的文档数据要存储,那么咱们选用Elasticsearch or Mongodb?

明白两者定位

MongoDB和Elasticsearch都属于NoSQL范围的数据库,且都属于文档型数据存储数据库。

所以这两者的泛滥性能和个性高度重合, 但其实两者定位还是有所不同。

MongoDB是文档型数据库, 提供数据存储和治理服务。

Elasticsearch作为一个搜查引擎,定位是提供数据检索服务,也就是说重点是全文索引,即含糊婚配。

因此,Elasticsearch的设计会有所侧重,比如Mapping无法变,带来的代价就是es不特意长于作为纯文档数据的治理者, es可以从其余数据源同步数据过去提供全文检索和查问,不特意长于自己对数据启动存储和治理。

MongoDB有多个存储引擎可以选用, 而且MongoDB不只看重数据的剖析, 对数据的治理雷同看重, 总的来说MongoDB更偏差于数据的存储和治理, 可以作为数据源对外提供。

Elasticsearch则有很多插件可以经常使用,相对来讲Elasticsearch更偏差于数据的查问, 普通状况下elasticsearch仅作为数据检索服务和数据剖析平台, 不间接作为源数据治理者.

所以,假设系统中已有mongodb或其余数据库作为关键数据存储,而Elasticsearch关键担任从其中失掉局部数据提供极速全文检索即可,即mongdob+Elasticsearch的打算.

此文我更想论述的是,当名目思索物理资源、运维老本等方面限度时,不想同时引入两套数据库时,二者只能选用一个时,咱们选哪个呢??

全文检索的需求

首先,要细心理考名目需求中,能否存在对全文检索的需求,假设存在,检索的条件能否复杂?能否很花式?检索的性能要求能否十分高?

假设答案都是yes,那么基本上可以确认就得选Elasticsearch了,一票否决mongodb。

Mongodb是可以满足基本的含糊查问性能的,咱们在实践名目中,3个节点Mongodb集群内存有0万业务数据,在一个业务内容上用regex含糊查问一个关键词,只含糊查前100条,基本可以1秒内前往。

然而更初级一点的含糊查问就很难允许了,并且触及查问count总量时就十分慢,经常10秒以上才干前往结果。

所以评价名目能否对全文检索有比拟高的需求要重点考量。

字段能否经常变换

假设业务重点在于数据的增删改查,全文检索的要求不高,那么Mongodb或许更适宜。

比如,电商业务一个基本的性能模块就是存储各种品类的商品消息,各种商品的个性和参数各异,MongoDB灵敏的文档模型十分适宜于这类业务。由于商品的品类单一,存入汇合中的每一种商品在字段上都有差异,并且未来还会减少新品类的商品。

这种数据字段预期未来会经常变化,显然mongodb更好,ES字段变化时处置起来比拟费事,须要经常变卦mapping,代价很大,普通须要从新写入一个新的index,做reindexing来处置,在数据量到达一亿以上时,须要大半天赋能成功,并且对线上写入的业务是有必定影响的。

所以关于数据结构经常频繁变化,一个汇合中存储多种字段不同的数据时,用monggodb会更好!

配件资源方面

假设从资源占用方面角度看,MongoDB可以允许存储文件类型的数据, 作为数据库也有数据紧缩才干, es则由于少量的索引存在须要占用少量的磁盘和内存空间。

在mongodb不须要建太多索引的状况下,mongodb或许更节俭一些资源,当然影响最后占用内存和磁盘空间的要素较多,这个也不齐全相对,所以须要依据实践状况去测一下。

运维部署

在运维部署方面,ES的一套工具ELK,如今叫Elastic Stash,自带对集群的形态监控,装置部署也较mongodb繁难太多,对运维人员来说相比mongodb容易上手太多。

在弹性伸缩方面,ES相比mongodb也容易太多,真的容易太多,并且,ES水平裁减更容易,能够智能平衡!

可以担任的说mongodb对运维部署人员的要求要比ES显著要高很多。用ES集群,你会显著觉得你对它的掌控力更强。

所以,在监控运维方面,ES显著更具长处。

性能方面

写入性能与查问性能对比如面,mongodb在除了全文索引之外的绝大局部场景是会比ES要高一些的,尤其是写入性能!!!

在性能方面,我觉得假设谋求极致的写入性能与写入实时性要求,那么应该选用mongdob,否则Elasticsearch也足够用啦。

咱们在多个实践名目中,对ES集群的查问性能与写入性能还都是比拟满意的。

总结

在日志运行畛域,两者可以相互代替,但经过上述对比,显著选项ES更好。

假设你的业务场景就是须要一个文档型的业务数据库,比如咱们目前担任树立的多个业务数据库,关键是基本的增删改查,那最好还是选mongodb。

假设你有要求复杂全文检索又并发性能要求较高的业务场景,相似搜查服务,那最好的选用还是elasticsearch。

但其实对大少数的中小公司来讲,这两者的数据治理才干并足够满足业务需求,都可以相互代替。

综合考量上去,绝大局部场景用ES相对就可以比拟好的满足了,除非对写性能有极高的要求,除非字段未来会频繁变卦。

最后,大家还是要依据自己名目标实在需求,启动综合评价和测试。

您可能还会对下面的文章感兴趣: