至少前天接触了有致于做物联网平台的某鞋业集团,发现对MongoDB文档数据库理解还是不够深刻。今天再次在两台Linux CentOS主机安装了MongoDB数据库,对其高级特性进行了验证。有以下经验。

一、MongoDB无初始结构化的定义,有利于物联网数据的松散化管理。

1、我们插入两条文档数据,"name","color","failure" 元数据事先并未定义

> db.mxCollection.insert({"name":"car1","color":"yello"})

WriteResult({ "nInserted" : 1 })

> db.mxCollection.insert({"name":"car1","failure":"yes"})

WriteResult({ "nInserted" : 1 })

2、查询这两条数据,发现数据显示不像mysql,单元列存储无规则;而且默认有_id元数据,有利于进行唯一性的检索

> db.mxCollection.find()

{ "_id" : ObjectId("5cee854cc74bc88162353db6"), "name" : "car1", "color" : "yello" }

{ "_id" : ObjectId("5cee8589f918f3b3837a6c81"), "name" : "car1", "failure" : "yes" }

3、MongoDB直接架构在磁盘上,并未在HDFS上

标粗的两个文件即为数据库文件。

[root@ecs-maxing-0001 bin]# cd /data/db

[root@ecs-maxing-0001 db]# ls

journal  local.0  local.ns  maxing.0  maxing.ns  mongod.lock  storage.bson  _tmp

二、MongoDB原生支持读写分离,以及自动主备切换

1、用rs.add命令在primary节点加入secondary节点,当主节点死亡时,将自动连接备节点。

2、比起mysql主从同步后,mysql切换节点需要proxy软件支持,而MongoDB数据库原生支持。不得不说,后起之秀的数据库的确先进了很多。

做物联网平台,MongoDB是首选-LMLPHP

三、MongoDB原生支持数据切片,支持自动横向伸缩

做物联网平台,MongoDB是首选-LMLPHP

Shard节点为真正的数据存储节点,而ConfigServer则进行数据的分配管理,RouterSDK安装在App端。通过RouterSDK与configServer的通信,实现自动选择Shard节点,满足数据在不同服务器存储的需求。Router前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用,实现了去中心化。

同时Shard节点支持自动弹性扩展、伸缩,任意增加、减少服务器不影响业务的运行。

MongoDB去中心、支持不中断业务的扩展,比Mysql的复杂分布式数据库配置的确先进、简单了不少。

因篇幅有限,明天我们测试一下数据库分片的实际效果。

四、MongoDB通过建索引可以极大加速数据检索时间

物联网的时代,数据增加非常之快,且数据量非常之在。比如一个物联网的智能穿戴手环,一天可能增加10M的数据量,后期的数据检索时间将非常痛苦。例如,想查询一年内,所有的走路步数,实际已经完成了一次count()计算。如果没有建索引,如果数据量很多,有可能十几分钟都难以得到结果。建索引后效果将提升很多,有利于物联网数据的大数据快速检索。

1、建立索引

> db.mxCollection.createIndex({"name":1})

{

        "createdCollectionAutomatically" : false,

        "numIndexesBefore" : 1,

        "numIndexesAfter" : 2,

        "ok" : 1

}

2、实测在1GB左右的数据量,从优化前的执行15.15S到优化后降至0.013S,性能提升了1000多倍。

> db.mxCollection.find({"name":"hello"}).pretty()

{ "_id" : ObjectId("5cee8b41d0e361b43e717d4d"), "name" : "hello" }

希望以上文章能帮到您。

更多内容实时更新,请访问公众号。    做物联网平台,MongoDB是首选-LMLPHP

 

点击这里,获取最高¥1888阿里云产品通用代金券

06-28 14:44