新数仓系列:MongoDB关键能力和特性梳理

最近看一本书,铃木敏文的《零售的哲学》,里面提到一个很有意思的观点,711核心使命是提供便利,围绕便利场景,提供一系列食品、ATM服务等,而不是和超市去PK货物品种。

联想到常见的NOSQL数据库和传统关系型数据的区别也有点类似;传统关系型数据库发展了几十年,就像超市一样,功能非常多,非常完善,也是进入到各个行业中去。NOSQL从一出生就是带着解决关系数据中的某些场景的不突出/不擅长的使命。

另外一些新数据库又思考着突破NoSQL的场景的限制,想着同时解决OTLP/OLAP,也有诞生了NewSQL或者HTAP的概念,典型的有TiDB/CockroachDB。

可以说,随着技术的发展,尤其是硬件的更新,新的存储和新的网络,NOSQL数据库有几个趋势:

1、融合和跨界是各个数据库(NOSQL/NEWSQL/SQL)当前选择,所以各个NOSQL数据库相互之间重叠能力很多,但是未来是否有一个大一统的数据库?这个未必。

2、数据库场景化趋势非常明显,围绕核心擅长的场景,去补齐和完善周边生态和能力也显得尤为重要。

讲了这么多NOSQL数据库大的趋势和概念,接下来我会梳理下常见的一些NOSQL数据库关键能力和适合的场景。

本文是第二篇,梳理MongoDB适合的关键能力和适合场景。梳理不全的地方,请大家留言补充!

前面有一些相关文章,大家可以看看:

新数仓系列:Hbase国内开发者生存现状(2)

新数仓系列:Hbase周边生态梳理(1)

新数仓系列:开源组件运营(3)

新数仓系列:HBase关键能力和特性梳理

01

MongoDB简介

MongoDB是一个介于关于数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,语法类似Javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库

  • 面向集合(Collenction-Orented)

意思是数据被分组存储在数据集中被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似于数据库中的表,不同的是它不需要定义任何模式

  • 模式自由(schema-free)

意思是集合里面没有行和列的概念,下面的两个例子是可以存储在同一个集合中:

{“name”:”mongo”}

{“age”:25}

  • 文档型(documents)

意思是我们存储的数据是键值对的集合,键是字符串,值可以是数据类型集合中任意的类型,包括数组文档,每个文档相当于关系型数据库中的一个记录

02

MongoDB特点

MongoDB的特点是高性能、易部署、易使用、存储数据非常方便,主要特性有:

  • 文件存储格式为BSON (一种json的扩展),面向集合存储,易于存储对象类型的数据,模式自由
  • 对嵌套数据模型的支持减少了数据库系统的IO操作;
  • 索引支持更快地查询操作,支持嵌套文档和数组的键索引。
  • 支持动态查询
  • 支持全文搜索,地理位置索引等
  • 使用高效的二进制数据存储,包括大型对象(图片视频等) GridFS
  • 自动处理碎片,以支持云计算层次的扩展性 Map / Reduce
  • MongoDB的同步机制(称为replica sets,复制集合,即保持了相同数据集合同步的MongoDB服务器集群),提供了自动失效备援(automatic failover)和数据冗余性(data redundancy)支持。
  • 水平伸缩性
  • 自动分片部署数据到机器集群的功能
  • 复制集合(replica sets)能够为低延迟高吞吐量的部署提供最终一致性。 > 以上内容来自MongoDB官网介绍,对于前端工程师来说,MongoDB最大的好处就是,可以使用Javascript的语法来方便的完成数据库的CRUD操作。

03

支持不完善

  • 多表关联: 仅仅支持Left Outer Join
  • SQL 语句支持: 查询为主,部分支持
  • 多表原子事务: 不支持
  • 多文档原子事务:不支持
  • 16MB 文档大小限制
  • 不支持中文排序
  • 服务端 Javascript 性能欠佳

04

适合场景

  • 持久化缓存层
  • 高效的实时性
  • 用于对象及JSON数据的存储
  • 高伸缩性的场景
  • 大尺寸,低价值的数据存储

05

不适合场景

  • 要求高度事务性的系统
  • 传统的商业智能应用
  • 复杂多表查询

参考文档:when to use mongodb-tj.pdf

梳理不全的地方,请大家留言补充!

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2018-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

和开发人员讨论一个业务需求和简单实现过程(r7笔记第49天)

前几天一个开发的同事来找我咨询一个问题,说是咨询,其实是开发的同事也不是非常清楚里面的逻辑,因为历史系统,历史原因,各种原因吧,所以我也是带着试试看的态度来帮助...

3084
来自专栏Java帮帮-微信公众号-技术文章全总结

面试重要知识点复习大纲

面试重要知识点复习大纲 一、Java基础部分 (搞定所有技术之后才考虑复习的技术点) 1.数组中的排序问题(笔试或者机试,前者可能性更大) 2...

2634
来自专栏Golang语言社区

Golang语言--计算运行的时间

函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。...

3278
来自专栏云成本管理

云成本管理方法论(四)——云优化管理之管理措施

因为判定规则分析中的判定结果较分散,为便于后继的分析和使用,我们将判定结果进行分类,不同的类别称为“问题类型”。

4149
来自专栏韩伟的专栏

帧同步游戏开发基础指南

最近一个月休了个假,体验了一下类似欧洲的田园生活。所以更新几乎荒废了,但是总结和积累是一直持续着的。根据前一阶段对于实时对战游戏的开发思考,写了这一篇入门级的文...

4286
来自专栏腾讯大数据的专栏

PGXZ-腾讯全功能分布式关系数据集群

开头先解释下全功能什么意思,所谓的全功能指的是支持绝大部分的SQL特性,像主键,触发器,约束,函数,存储过程,跨节点join等等。而且这些特性的支持对业务完全透...

2228
来自专栏编程札记

MongoDB替换MySQL?

早在上个世纪就有什么面向对象数据库等非关系型数据库扬言要替代关系型数据库,但是到现在,那些数据库都默默无闻,关系型数据库却依旧是应用最广泛的数据库,为什么?

3295

为什么我们从Python切换到Go?

切换到新的编程语言向来是关键一步,尤其是当你的团队只有一位成员有该语言的使用经验时。今年年初,我们将 Stream 的主要编程语言从Python 切换到 Go。...

912
来自专栏PPV课数据科学社区

【学习】NoSQL数据库的35个应用场景

现在我们站在各个用例的角度上来考虑那种系统适合于这些用例。 你的意见是首先,我们要纵览各种数据模型。这些模型的分类方法来自于Emil Eifrem 和 NoSQ...

2789
来自专栏杨平安的专栏

微信 PaxosStore:海量数据冷热分级架构

导语 本文整理自笔者在“腾讯大讲堂”的演讲。 作者介绍:杨平安,来自广州的微信事业群,在腾讯已经工作五年。 主要分享内容: 为何公司卓越研发金奖花落PaxosS...

8456

扫描关注云+社区