APP下载

基于MongoDB的物联网开放平台用户信息管理

2018-01-22杨洁赵启飞

现代电子技术 2018年2期
关键词:开放平台物联网数据库

杨洁+赵启飞

摘 要: 物联网具有涉及领域广、数据结构复杂、信息覆盖面大、使用用户多等一系列特点。传统的关系型数据库在存储用户信息数据时,往往要预先定义数据表结构,这将难以实现动态增加多样化用户属性信息的功能。此外,复杂的用户信息查询需求也难以得到满足。提出一种基于非关系型数据库MongoDB的物联网开放平台用户数据存储管理方式,可满足用户存储的各种需求。同时,属性查询、特殊字段查询、限制返回信息等需求都可得到有效支持。

关键词: 物联网; 数据库; 用户信息; 开放平台; 用户存储; 用户信息查询

中图分类号: TN915?34 文献标识码: A 文章编号: 1004?373X(2018)02?0075?04

Abstract: Internet of things (IoT) has the characteristics of extensive involving domains, complex data structure, large information coverage, and a big amount of users. In the traditional relational database, the structure of data table often needs to be predefined to store user information data, which makes it difficult to realize the function of dynamically increasing various user attribute information. The complex user information query requirement is also difficult to be met. Therefore, a user data storage management method based on non?relational database MongoDB is proposed for IoT open platform, which can meet various needs of user storage. Meanwhile, attribute query, special field query, information return limit and other needs can be effectively supported.

Keywords: IoT; database; user information; open platform; user storage; user information query

0 引 言

当今,物联网的运用已牵扯到多个范畴,如医疗行业、智能家居、生态监视、智能交通等[1?2]。尽管如此,但仍没有形成大规模的、开放式的行业应用。运用内容从周密的业务流程发展到现在的通信、购物、娱乐、社交等各范畴。数据量也从前期的TB级升至PB级,并仍在连续爆炸式生长,互联网运用进入大数据时期。另外,随着全球定位系统(GPS)、传感器、自动追踪器和监控系统的广泛运用,新的数据源也生成了大量数据,这些数据给存储、分析和归档带来了新的机遇和挑战[3]。随着互联网用户的不断增加,用户角色的不同管理,面对日新月异的互联网应用,需要良好的数据组织模型与数据库解决方案来支持用户信息的快速查询。

MongoDB是一个基于分布式文件存储的数据库,能够为Web运用供应可扩展的高性能数据存储处理方法,它供应了一种强大、矫捷、可扩展的数据存储方法,支撑疏松的数据结构,运用JSON语句[4]。其具有模式自由、可存储二进制数据对象、支持查询和网络访问等优点。MongoDB将关系型数据库中“行”的概念转换为“文档”,支撑文档数据的内嵌[5]。

由于无模式限制,MongoDB可以为不同的用户提供多样化的字段定义,而无须大量迁移数据,从而使得数据模型具备灵活变更的能力。本文设计的用户信息管理系统以MongoDB的对象模型工具Mongoose为接口,设计与实现一系列用户文档信息操作,用于支持用户信息入库、用户信息修改、查询等。

1 物联网开放平台总体架构

在通用B/S架构的互联网理论上,添加机器客户端,构建人和机器为客户端的实时B/S/M架构[1],如图1所示。

本文系统由IoT云平台、用户浏览器和IoT网关端三个部分组成[1]。

2 MongoDB介绍及特点

MongoDB是10gen公司研发的面向文档的基于云计算的数据库,用C++代码编写,介于关系型与非关系型数据库中,它供应了一种强大、矫捷、可扩展的数据存储方法,支持松散的数据结构,运用JSON的语法[6]。MongoDB的功能十分强大,如内置MapReduce映射聚合的计算方式,以及对复合索引的支撑,还支撑巨大的查询语言,其语法格式与面向对象的查询类似,支持网络形式的访问。MongoDB可在Linux,Windows或OS平台上操作,并且支撑32位和64位的字长,默认端口为27017。同时该软件还提供了对多种语言的支撑,如Java,Ruby,PhP,C++等。MongoDB的逻辑结构实质上是一种层次构造,包含文档、集合和数据库三部分[7]。在MongoDB內部,每个数据库都有一个.ns文件和一些数据文件,采取预分配空间的机制,永远维持附加的空间和空余的数据文件,进而有效防止了因为数据暴增产生的磁盘压力过大的问题。每个预分配的文件都用0进行添补,数据文件每更新分配一次,此数据文件的大小将会是上一个文件的2倍,每个数据文件最大为2 GB。

3 用户数据结构模型及需求分析endprint

所谓用户,就是在物联网开放平台上注册的客户,他们是网络服务的应用者。当用户在平台上注册个人信息之后,他们的信息会自动存储到MongoDB数据库中,存储所有用户信息的一个集合就叫用户集合。

在数据库中对用户进行存储建模时用到Mongoose这个类库。Mongoose是MongoDB的一个对象模型工具,是基于node?mongodb?native开发的MongoDB NodeJS驱动,在异步的环境下可执行。同时它也为关于MongoDB操作的一个对象模型库,包含了MongoDB对文档的一些增删改查等一般方式,让NodeJS操作MongoDB数据库变得越发灵活简略[8]。即Mongoose提供了一个模型层让接口能通过Node操作MongoDB的集合。这个模型层提供了一个共同的定位操作文档验证,持久化迂回,还有应该从业务层中抽象出来其他的逻辑操作。Mongoose还可以执行一个中间件功能。中间件就等同于Java中的过滤器、拦截器,在执行某一方式前,将其阻挡,好像AOP中的前置注入。举个简单的例子,当执行save方法时,往往需要对存入的数据进行验证,虽然Mongoose提供了safe,strict,schematype,default,validaition验证,但是这些验证都没有提供完善的错误处理或者拦截机制,而运用中间件,可以对错误的数据进行阻挡、错误处理、修订等。由此看来,safe,strict,schematype,default,validaition本身就是内部提供的中间件。中间件是一种控制函数,近似插件,能控制流程中的init,validate,save,remove方式。

借助node.js+mongodb+mongoose的開发环境,在MongoDB数据库中,采用JSON格式[4]表述用户信息,文本表达方式如下:

{ "_id": //用户文档ID,Mongodb自动生成

"username": //用户名

"password": //用户登录密码

"email": //用户E?mail地址

"regtime": //注册时间

"time": //最后登录时间

"status": //用户状态

"description": //用户简介

"Gateways": //["GID1","GID2",…]

}

在数据库用户集合中每个用户一个文档,其中的信息以键值对的方式存在[9]。

在Mongoose中先定义Schema如下:

var UserSchema=new Schema({

username:{

unique:true,

type:String

}

password:String,

email:String,

regtime:{type:Date,default:Date.now},

time:{type:Date,default:Date.now},

status:String,

description:String

})

再根据建立的文本属性Schema,设置相应的数据库模型Model如下:

var User=mongoose.model(′user′,UserSchema);

最后就是创建Model模型的实体Entity。

3.1 在MongoDB数据库中存取数据

数据库中对用户的管理包含添加用户、删除用户、修改用户密码和查询用户。具体实施方法如下:

3.1.1 用户集合的查询操作

首先,查询使用最简单的find函数。查询条件可以包括以下几个:用户名(usename)、密码(password)、邮箱(E?mail)等。

举例函数为:

User.find({"usename":syh},function(err,docs)

{

console.log(docs);

})

用以上任意一个作为条件皆可进行查询操作,并且已经验证成功,是可以查询到的。

其次,若用findOne函数,把以上属性的任意一个作为查询条件,也可进行查询,但是返回的是查询到的第一个符合条件的文档。

举例函数为:

User.findOne({"usename":"ycc"},function(err,docs)

{

console.log(docs);

})

已验证成功。

再次,若用count函数,把以上属性的任意一个作为查询条件,则可统计出来符合条件的文档个数。

举例函数为:

User.count({"usename":true},function(err,docs)

{

console.log(docs);

})

已验证成功。

最后,用映射(projection)申明来限定全部查询匹配文档的返回字段。projection以文档的形式列举结果集中要包含或者排除的字段。可以指定要包含的字段(例如:{field:1})或者指定要排除的字段(例如:{field:0})。默认_id被包括在结果集中的,需从结果集合中除去_id字段,且在projection中指定除去的_id字段({_id:0})。例如用户集合中不返回_id和gateway。endprint

User.find({"usename":"syh"}{"_id":0,"gateway":0},function(err,docs)

{

console.log(docs);

})

3.1.2 用户集合的插入(增加)操作

要插入数据到MongoDB集合,需要使用Mongoose的save()函数。

语法为:

Entity.save();

3.1.3 用户集合的更新(修改)操作

Mongoose的update()和save()方法用于更新文档的集合。Update()方法不断更新现有的文档值,而替换现有的文档需要通过文件中的save()方法。

语法:

Entity.update({name:′111′},function(err,docs)

{

console.log(docs);

})

3.1.4 用户集合的删除操作

Mongoose的remove()方法用于从集合中删除文档。remove()方法接受两个参数。第一个是删除criteria,第二是justOne标志:

1) deletion criteria:(可选)删除标准,根据文件将被删除。

2) justOne:(可选)如果设置为true或1,然后只删除一个文件。

语法:

Entity.remove({name:′111′},function(err,docs)

{

console.log(docs);

})

3.2 用户密码加密设计与登录验证

用户集合中加密算法使用的是哈希运算,哈希运算是一个单向的过程,它能把任意数目的数据变成固定长度的指纹,即在数学性质上不可能从哈希值反推出哈希前的明文密码。并且当输入发生变化时,尽管只变化一个字节,那输出的哈希值也会有极大的差异。这种特性恰好很合适保存密码,因此一般来说希望有一种不可逆的算法来保存加密后的密码,同时又需要在用户登录时来验证密码是否是正确的。假如设置的登录密码明文是“123456”,用普通的MD5哈希运算MD5(“123456”) 得到e10adc3949ba59abbe56e057f20f883e这个哈希值。最后网站把这个哈希值存入数据库中。如果下次登录时仍然输入“123456”这个密码明文,则网站得到密码明文后先进行MD5哈希运算,把获得的哈希值和数据库中储存的哈希值进行比对,若两个哈希值相同时,说明输入了正确的密码明文。

加密的具体函数使用如下:

var secretKey=user.password;

var hasher=crypto.createHash("md5");

//構建并返回一个hash对象,其是一个指定算法的加密hash,用于产生hash摘要

hasher.update(secretKey);

//更新hash的内容为指定的数据,即secretKey

var hashmsg=hasher.digest(′hex′);

//计算所有传入数据的hash摘要,hex为编码方式,hashmsg为加密之后的数据

console.log(hashmsg);

user.password=hashmsg;

加密后在数据库中查询用户信息时,看到的用户密码已是密文形式,这样确保了用户数据的安全性。

针对用户登录物联网平台时数据库中进行的验证用户名和密码是否为正确事件,在此是利用中间件函数做的。笔者进行的验证函数如下:

UserSchema.pre(′save′,function(next){

var user=this;

if(user.username==′Will′&&user.password==′7aec8f6a18f18156

da8b48bd9f0e567f′)

{

console.log(′登录成功′);

}

else

{

console.log(′用户名或密码错误′);}

});

要是用户输入的用户名和密码都正确,就可看到登录成功的提示,直接跳到物联网平台首页;要是系统显示用户名或密码错误,这种情况就需用户重新输入准确的信息进行验证。

4 结 语

基于MongoDB的用户信息管理可支持大量信息存储,查询方式以及自定义方式更新等需求,传统关系型数据的模式化限制得到有效解决,从而支持多样化地用户数据读取。其中使用到的一些索引方法对用户直接快速地得到自己想要的信息提供了很大的方便,对后台管理人员的工作也提升了效率,基于MongoDB的用户信息存储方式是可行的技术方案。

参考文献

[1] 苏祥林,陈文艺,闫洒洒.基于树莓派的物联网开放平台[J].电子科技,2015,28(9):35?37.

SU Xianglin, CHEN Wenyi, YAN Sasa. Open platform for Internet of Things based on raspberry pi [J]. Electronic science and technology, 2015, 28(9): 35?37.

[2] 刘丹丹.物联网产业化遇挑战智能家居或成突破口[J].通信世界,2014(34):33.endprint

LIU Dandan. Smart home may become a breakthrough when IoT industrialization meets challenge [J]. Communications World, 2014(34): 33.

[3] 杜卫华.浅析基于MongoDB的云数据管理技术的研究与应用[J].网络安全技术与应用,2014(8):89.

DU Weihua. Analysis on research and application of cloud data management technology based on MongoDB [J]. Network security technology and application, 2014(8): 89.

[4] 谢华成,陈向东.面向云存储的非结构化数据存取[J].计算机应用,2012,32(7):1924?1928.

XIE Huacheng, CHEN Xiangdong. Cloud storage?oriented unstructured data storage [J]. Journal of computer applications, 2012, 32(7): 1924?1928.

[5] 张恩,张广弟,兰磊.基于MongoDB的海量空间数据存储和并行[J].地理空间信息,2014(1):46?48.

ZHANG En, ZHANG Guangdi, LAN Lei. Storage and parallelism of massive spatial data based on MongoDB [J]. Geospatial Information, 2014(1): 46?48.

[6] 张尧,甘泉,刘建川.基于MongoDB的地理信息共享数据存储模型研究[J].测绘,2014,37(4):147?150.

ZHANG Rao, GAN Quan, LIU Jianchuan. Research on storage model of geographic information shared data based on MongoDB [J]. Surveying and mapping of Sichuan, 2014, 37(4): 147?150.

[7] 张小波,成良玉,邱科宁,等.基于协同数据库的数据迁移模型研究与实现[J].计算机工程与设计,2005,26(5):1220?1222.

ZHANG Xiaobo, CHENG Liangyu, QIU Kening, et al. Research and implementation of data migration model based on collaborative database [J]. Computer engineering and design, 2005, 26(5): 1220?1222.

[8] 彭娜.基于Node.JS博客系统的设计与实现[D].大连:大连理工大学,2013:18?19.

PENG Na. Design and implementation of blog system based on Node.JS [D]. Dalian: Dalian University of Technology, 2013: 18?19.

[9] 舒昝,张晓冉.面向异构类型的大数据查询优化研究[J].自动化与仪器仪表,2016(4):199?200.

SHU Zan, ZHANG Xiaoran. Research on query optimization for heterogeneous types of big data [J]. Automation and instrumentation, 2016(4): 199?200.

[10] 席晓晶.“智慧城市”时代“物联网”技术在城市管理中的应用[J].物联网技术,2016,6(5):55?56.

XI Xiaojing. Application of IoT technology to city management in smart city era [J]. Internet of Things technologies, 2016, 6(5): 55?56.endprint

猜你喜欢

开放平台物联网数据库
基于在线开放平台的混合式课堂教学模式构建与实践
基于AliGenie语音开放平台的传统家居智联网解决方案
数据库
搭建开放平台 收获真情实感——谈《品德与生活》教学中开放式教学的实施
基于高职院校物联网技术应用人才培养的思考分析
中国或成“物联网”领军者
数据库
数据库
数据库
云计算开放平台的知识产权问题研究