全新版本MongoDB数据存储席卷物联网

简介: 8月9日2016云栖大会北京峰会拉开帷幕,阿里云数据库技术组专家张友东(林青)带来了“MongoDB在物联网行业数据存储实战经验”的重要演讲。其中首先对物联网进行了模型抽象,着重和大家剖析了MongoDB解决方案,包括文档模型、高可用复制集、分片集群和Aggregation&MapReduce,最后

本文首先对物联网进行了模型抽象,着重和大家剖析了MongoDB解决方案,包括文档模型、高可用复制集、分片集群和Aggregation&MapReduce,最后分享了全新的MongoDB特性。

以下为内容整理:

MongoDB是文档型数据库,其核心的三大优势是灵活文档模型 、高可靠复制集、 高可扩展分片集群。在最新的 DB Engine Rank 的排名中,MongoDB 排在第4,是非关系型数据库领域的领头羊。

物联网模型抽象

物联网离我们越来越近,这主要得益于云计算和移动互联网技术的发展。物联网技术已经应用于智能家居、车联网等领域,我们进行模型抽象出物联网应用的共性,很多设备(Assets)通过智能的传感器采集很多数据并发到云端,这些设备不断的产生日志、数据、事件并发到云端,数据在云端进行存储计算后,会产生很多结果以接口的形式提供出去,方便我们开发更多的手机App和Web应用。

60959e7d04235cf30254c236c250078195a668e4

物联网存储需求

f8bbc12f77740119ae5f8f86f0cb86b16409fa14


MongoDB 解决方案

1b131a5ab56ad58c73d0f1d6d33d99d1268326a9

 

文档模型

JSON 格式

9ab5e45e81460d2c81a4fe187fc5edf812bb7976

JSON格式的好处:

  • 最接近真实对象模型,对开发人员友好。
  • Schema free,增加和删除字段非常灵活,直面灵活多变的需求,快速迭代。
  • 数组、内嵌文档支持,数据聚集,读写性能提升。

应用场景比如设备增加新特性;事件日志,数组+内嵌文档。

Schema free

36f88403f47ef03a1142224ffb664887060eace5

随时动态增加字段如图。

  • 增加字段无需变更表结构。
  • 在MongoDB3.2版本推出了文档校验,使其兼备灵活和严禁的特性。

内嵌

fbe9f90d0548297571150b4116c9f73d8979bc20

使用MongoDB可以把所有的记录作为这个设备的元素,以数组的形式存储起来,还可以划分,把每分钟汇报按小时为单位聚合存储,这样可以达到更少的文档、更快的查询。

GridFS

7c8edc7f29b81b5b3e0974f989df5a1157263daf

MongoDB 单个文档不能超过16MB,更大的文档可以使用 GridFS 来存储,例如物联网里 OTA 升级文件、图片视频等的存储。

GridFS原理:

  • 文件内容分成多个文档存储在fs.chunks集合。
  • 文件元信息存储在fs.files集合。

 

功能支持

数据压缩

a4ba0d30fd6887b4cffd4feda7502587e55b8970

MongoDB3.0之后推出了新的存储引擎Wiredtiger,Wiredtiger存储引擎对数据的压缩支持非常好,用户原来自建的MongoDB使用 mmapv1,迁到云上后换成Wiredtiger,磁盘的容量通常能下降到原来的10%-30%。

MongoDB对索引的支持非常丰富,下面重点介绍物联网场景里经常被使用到的位置索引和TTL索引,位置索引可用于构建各种基于地理位置的应用,而 TTL 索引可以实现设备历史数据自动过期的功能。

位置索引

917971c7e1799970b33d14ae202629cd7e1ddea7

MongoDB的位置索引可以针对一个字段,MongoDB支持两种类型的位置索引字段,点和更灵活的位置,只要字段是这种数据结构,就可以建立位置索引。建立位置索引后,就可以使用MongoDB的near和geoWithin查询操作服务。

TTL 索引

因为后端的存储数据有限,只能存储最近的数据,我们可以让MongoDB支持让指定数据在某段时间后过期。

TTL索引有两种应用模式:指定某段时间后过期和指定时间戳过期。MongoDB对TTL索引的支持是有限制的,针对Date类型字段建索引。MongoDB在执行TTL索引时,后台过期逻辑每分钟执行一次。

0949be4d3e67c07b6cda85c4d1cc4577e5433f9b

 

高可用复制集

829fcc24c978acf5e1edb3f7d1a15da55df88889

高可用复制集特性如下:

  • 自动故障检测,自动failover
  • 数据多副本存储,保证数据安全
  • 多节点可同时提供读服务

以三节点复制集为例,会有一个Primary和两个Secondary,复制集里的所有成员通过选举协议选出Primary,默认情况下,所有数据都是写到Primary且只能通过Primary写,读也是通过Primary来读。三节点数据存储三份,可以容忍两个副本失效,保证了数据的高可靠。当Primary挂掉后,另外两个Secondary会发起新选举,保证服务正常进行。

连接访问

MongoDB里面有Connection String URI,所有driver都支持Connection String URI方式连接,这个通用的连接串包含访问MongoDB的用户密码信息,可以指定多个节点的地址,可以指定鉴权数据库的信息。通过这种方式,只要在这个连接串里指定后端多个节点或指定 replicaSet 参数,正确连接复制集后,用户客户端连接到这个复制集后,会跟复制集的每一个成员建立一个心跳关系,会不断的监测后端复制集成员的变化情况,当后端出现主备切换时,driver 能自动感知。

WriteConcern

39e0b1d0e7bb26bcbc129b936a09c515a003e037

MongoDB通过WriteConcern保证数据高可靠,默认情况下,MongoDB 使用{w: 1}的 WriteConcern 级别,当数据写到 primary 就像客户端返回。对于非常重要的数据,可在写入时设置WriteConcern: { w: “majority”},就会写到后端复制集成员的大多数,再向客户端返回,保证数据在有节点宕机时也能不丢失。

ReadPreference

8c09118a1abe1499ce5b50f036f5b83c55934558

MongoDB通过ReadPreference实现读写分离,可以指定读写对象。

 

可扩展分片集群

3aa5251e75ec08e2eefca92a00550bd744477da4

可扩展分片集群可以实现海量数据存储、高并发写入,例如物联网里大量设备汇报的日志数据。

MongoDB为了实现分片集群,引入了两个新的组件mongos和Config Servers,Config Servers存储分片集群的元数据。首先配置好某个集合,按照某个key进行分片,接下来一条写请求就会到mongos上,mongos去Config Servers上查询路由表,把请求路由到后端的分片上,就实现了分片集群的功能。

shardKey

3f27ac4d0146ce37efbf34a1326ac113d54a0630

MongoDB支持范围分片,每一个范围在MongoDB的分片集群里成为一个Chunk,每一个Chunk就会分到后面的Shard上,优点是能很好的支持范围查询需求。

MongoDB支持Hash分片,针对Key先计算一次Hash值,再根据Hash值进行范围分片,优点是能均匀的将写请求分散到不同的分片。

选择集合的 shardKey 时并没有一个很完美的方案,需要用户根据数据分布特性、请求特性来选择最优的 shardKey,使用时应该尽量避免以下三个问题:

  • key 基数太小造成 jumbo chunk
  • 写入分布不均,造成热点
  • scatter/gather 查询影响效率 

负载均衡

e65254a569c575a8a6e6678fd5be68df9a6019e0

MongoDB在mongos中有balancer的任务,会周期性的扫描每个Shard当前负责的Chunk的数量,balancer根据shard持有的chunk数量自动负载均衡,balancer 运行时,要尽量主要如下2个问题。

  • 合理设置 balancer 窗口,避开业务访问高峰期
  • 备份时关闭 balancer,避免出现数据不一致的状态

 

数据分析

内建支持

b8a76901d13e7cb2ec24bf6bda21df9350d136a9

Aggregation Pipeline支持很多的运算符,传统关系型数据库单表能做的Aggregation Pipeline都可以做;MongoDB支持MapReduce,可以在MongoDB的集合上写MapReduce的任务,数据分析后,又写回MongoDB。

外部框架

f4bdef839e1493942f6e6c3672260f7cfe6cf794

通过MongoDB Spark Connector,可直接在MongoDB数据集上运行 Spark ,与阿里云 E-MapReduce 完美结合。

 

MongoDB 云数据库

MongoDB云数据库从2015年底开始公测,2016年3月份正式商业化运营,目已在线上稳定运行超过半年时间,了解更多请访问https://www.aliyun.com/product/mongodb

b63cd082d01a3d48964e3efad089c7daec9bd13d

云数据库全链路监控

483b5d1b19ad91075395e5436b938abe60801862

图为内部全链路监控视图,可以精确的看到云数据库的每一个客户端的每一个连接,可以看到上行下行的带宽,请求速率,丢包率等,这对于查找线上问题是非常方便的。

MongoDB 内核优化

ff095074d83370df86f0c56ca8f66c9c1bcbbbd1

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
2月前
|
NoSQL Linux Shell
linux 下mongodb7版本怎么连?
linux 下mongodb7版本怎么连?
104 10
|
2月前
|
存储 JSON NoSQL
【MongoDB】MongoDB的数据存储格式
【4月更文挑战第1天】【MongoDB】MongoDB的数据存储格式
|
2月前
|
存储 JSON 分布式计算
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
MongoDB【部署 01】mongodb最新版本6.0.5安装部署配置使用及mongodb-shell1.8.0安装使用(云盘分享安装文件)
272 0
|
存储 JSON NoSQL
『MongoDB』MongoDB的数据存储格式Bson比Json有哪些优势?
📣读完这篇文章里你能收获到 - MongoDB存储数据格式BSON介绍 - 使用Bson格式的三大优势
730 1
『MongoDB』MongoDB的数据存储格式Bson比Json有哪些优势?
|
1月前
|
NoSQL MongoDB 数据库
MongoDB最新版本是什么?
【6月更文挑战第8天】MongoDB最新版本是什么?
168 6
|
2月前
|
运维 NoSQL MongoDB
MongoDB有必要升级新版本吗?
如果你在 MongoDB 升级时需要协助,阿里云的专家还将为您提供升级规划建议,识别和缓解升级时可能出现的障碍、不兼容问题和潜在的性能问题。
2636 1
|
10天前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
存储 数据采集 NoSQL
Scrapy与MongoDB的异步数据存储
在数据采集过程中,处理大量的数据请求和存储任务是常见的需求。使用Scrapy来爬取数据并将其存储到MongoDB中是一个高效的解决方案。本文将介绍如何实现一个异步插入MongoDB的Scrapy管道。
|
2月前
|
存储 NoSQL 物联网
【MongoDB 专栏】MongoDB 在物联网(IoT)领域的应用
【5月更文挑战第11天】MongoDB,一种灵活可扩展的非关系型数据库,在物联网(IoT)领域中大放异彩。应对海量设备产生的多样化数据,MongoDB的文档型数据结构适应性强,适合存储设备信息及传感器读数。其实时更新、强大查询语言、索引机制和扩展性(通过分片技术)满足物联网的高实时性、复杂查询和数据增长需求。尽管面临数据安全和管理挑战,MongoDB已广泛应用于智能家居、工业 IoT 和智能交通等领域,并有望随着物联网技术进步和与其他领域的融合,如人工智能、大数据,持续发展。未来,优化数据质量、提升并发处理能力将是关键,MongoDB将在物联网的智能未来中扮演重要角色。
【MongoDB 专栏】MongoDB 在物联网(IoT)领域的应用
|
2月前
|
存储 关系型数据库 物联网
【PolarDB开源】PolarDB在物联网(IoT)数据存储中的应用探索
【5月更文挑战第27天】PolarDB,阿里云的高性能云数据库,针对物联网(IoT)数据存储的挑战,如大规模数据、实时性及多样性,展现出高扩展性、高性能和高可靠性。它采用分布式架构,支持动态扩展,保证99.95%的高可用性,并能处理结构化、半结构化和非结构化数据。通过SDK实现数据实时写入,支持SQL查询和冷热数据分层,有效降低成本。随着IoT发展,PolarDB在该领域的应用将更加广泛。
147 1

相关产品

  • 物联网平台