Elasticsearch和MongoDB简要对比

根据项目需求用到了Es,好久不用的我,赶紧查资料,然后忽然发现这个跟MongoDB怎么这么接近呢?

然后查阅了一些资料特此简单做下对比:

 

场景和目标

1、mongodb的目标是:“取代oracle和db2”(财务总监时上市说的)。和RDBMS是竞争关系。
2、es的大部分场景是:“一个常见的设置是使用其它数据库作为主要的数据存储,使用 Elasticsearch 做数据检索”(2.X官方文档里说的)。和RDBMS是辅助关系。

 

相同点:

1、都是以json格式管理数据的nosql数据库。
2、都支持CRUD操作。
3、都支持聚合和全文检索。
4、都支持分片和复制。
5、都支持阉割版的join操作。
6、都支持处理超大规模数据。
7、目前都不支持事务或者叫支持阉割版的事务。

 

不同点:

1、es是java编写,通过RESTFul接口操作数据。mongodb是C++编写,通过driver操作数据。(es对java开发更有好,利于排查理解)
2、mongodb的分片有hash和range两种方式,es只有hash一种。
3、es是天生分布式,主副分片自动分配和复制,开箱即用。mongodb的分布式是由“前置查询路由+配置服务+shard集合”,需要手动配置集群服务。
4、内部存储ES是到排索引+docvalues+fielddata。mongodb暂时未知。
5、es全文检索有强大的分析器且可以灵活组合,查询时智能匹配。mongodb的全文检索字段个数有限制。
6、es所有字段自动索引,mongodb的字段需要手动索引。
7、es非实时有数据丢失窗口。mongodb实时理论上无数据丢失风险。

 

总结:

1、es偏向于检索、查询、数据分析,适用于OLAP系统。mongodb偏向于大数据规模下的CRUD,适用于对事务要求不强的OLTP系统。

 

优缺点分析:

MongoDB:

优点

  • 面向文档存储(类JSON数据模式简单而强大)
  • 动态查询

  • 全索引支持,扩展到内部对象和内嵌数组

  • 查询记录分析

  • 快速,就地更新

  • 高效存储二进制大对象 (比如照片和视频)

  • 复制和故障切换支持

  • Auto- Sharding自动分片支持云级扩展性

  • MapReduce 支持复杂聚合

  • 商业支持,培训和咨询

数据示例:

{ "system" : { "currentTime" : { "$date" : "2015-07-27T14:06:40.976+0800" },
    "hostname" : "dachuanz-test",
    "cpuAddrSize" : 64,
    "memSizeMB" : 3791,
    "numCores" : 4,
    "cpuArch" : "x86_64",
    "numaEnabled" : false },
  "os" : { "type" : "Linux",
    "name" : "CentOS Linux release 7.1.1503 (Core) ",
    "version" : "Kernel 3.10.0-229.7.2.el7.x86_64" },
  "extra" : { "versionString" : "Linux version 3.10.0-229.7.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Tue Jun 23 22:06:11 UTC 2015",
    "libcVersion" : "2.17",
    "kernelVersion" : "3.10.0-229.7.2.el7.x86_64",
    "cpuFrequencyMHz" : "1596.149",
    "cpuFeatures" : "fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dtherm tpr_shadow",
    "pageSize" : { "$numberLong" : "4096" },
    "numPages" : 970635,
    "maxOpenFiles" : 64000 },
  "ok" : 1 
  }

缺点

  • 不支持事务(进行开发时需要注意,哪些功能需要使用数据库提供的事务支持)
  • MongoDB占用空间过大 (不过这个确定对于目前快速下跌的硬盘价格来说,也不算什么缺点了
  • MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方
  • 在32位系统上,不支持大于2.5G的数据(很多操作系统都已经抛弃了32位版本,所以这个也算不上什么缺点了,3.4版本已经放弃支持32 位 x86平台)

 

ElasticSearch


优点:

 elasticSearch 目前主要用于大量数据的挖掘和搜索。使用的优势是在数据量较大的时候可以进行快速搜索,并且本身还带有分词器,可以对elasticSearch内的数据进行分词搜索。有利于数据管理。

 

缺点:

    但相对的来说,缺点也很明显。在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式。之前的数据需要重新同步,对数据的管理有很多困难。

    一旦数据格式出现改变,会变得非常麻烦。

    另一个缺点就是在搜索的时候,和之前的mysql不同,有许多mysql可以搜索到的东西,在elasticSearch里就不能搜或很难搜。

 

数据示例:

{
  "_index": "rta_daily_report",
  "_type": "campaign",
  "_id": "145603275_m_normal_20170804",
  "_version": 1,
  "found": true,
  "_source": {
    "cid": 145603275,
    "advertiser_id": 457,
    "trace_app_id": "id1105855019",
    "network_cid": "plr_gs_ios_cn_osv9",
    "platform": 2,
    "direct": 1,
    "last_second_domain": "tracking.lenzmx.com",
    "jump_type": 7,
    "direct_trace_app_id": "id1105855019",
    "mode": 3,
    "third": "3444.tlnk.io",
    "hops": 1,
    "yyyymmdd": "2017-08-03T16:00:00",
    "type": "m_normal",
    "click": 2,
    "impression": 3,
    "revenue": 0,
    "install": 0
  }
}

 

小结:

不要以为对比就是敌人,他俩也是可以搭配的哦!Elasticsearch+Mongo亿级别数据导入及查询实践,哈哈。。。

所以说,能力不是重点,合作才有未来。

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhangBaby

请博主喝杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值