标题 | MongoDB数据库下文件型数据存储研究 |
范文 | 谢华成++马学文 摘要:针对云计算和WEB2.0环境下不断增容的文件型数据,采用关系数据库和IIS文件系统存储二进制文档效果不理想,关系数据模型制约了存储服务对海量文件信息快速访问和存取的能力。建立非关系型文档数据库MongoDB数据存储和实验平台,将海量互联网文件数据以 关键词:MongoDB存储;分布式文件存储;键值存储;非关系型数据库 中图分类号:G642 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.11.004 0 引言 互联网数据的数量正伴随云计算和WEB2.0的兴起而急剧膨胀,数据的种类从传统的记录式存储慢慢过渡到非记录式数据存储,即数据从传统的结构化数据处理转变为对非结构化数据处理。一方面,WEB2.0环境下网站内容通常由用户主动发布,交互性灵活,用户不断浏览媒体信息的同时,也主动将生活数据如微博、相册和音视频等非结构化数据生产出来。另一方面,网络用户众多,现存存储网络数据存储和处理能力急需提升。据中国互联网络信息中心(CNNIC)于2015年7月发布的《第36次中国互联网络发展状况统计报告》数据显示,截至2015年6月,我国网民规模约6.7亿,其中手机网民约6.0亿,众多用户浏览和发布的数据,多以媒体和文件等非结构化信息为主,现存网络的单机中心化处理已经不能满足应用需求。 因此,信息系统前端已不再是应用设计难点,文件及媒体型数据的可靠存储成为数据系统设计中的焦点内容,MongoDB数据库于2009年由10gen团队研究,适合文件存储。 1 MongoDB数据库存储原理与安装 1.1 MongoDB数据库简介 MongoDB是一个由C++语言编写的分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案,MongoDB可运行于Windows平台,也可运行于UNIX平台,用户根据应用需求,可以选择32bit版也可以选择64bit版,其中32bit版最大支持2GB文件,而64bit版则无限制。 1.2 MongoDB存储原理 MongoDB数据库中,数据存储以集合为单位,数据被分组存储于数据集(Collenction)中,每个集合在库中有唯一的标识,集合中可包含多个二进制文件。对应于关系型数据库(RDBMS),MongoDB是非关系型的,业界也将这类数据库称之为非关系型数据库 Not Only SQL,NoSQL)。在关系型数据库和非关系型数据库对应上,RDBMS中的表(Table)可与MongoDB的集合对应。而Table中的一条记录可与MongoDB中的一个键值对 MongoDB是面向文档的数据库,在存储文档时,二进制文件将采用 1.3 MongoDB安装方法 本研究选择了Windows Servers 2008(64bit)下 MongoDB 3.0.6 64bit版,将压缩包安装解压到本地非系统磁盘D盘,其路径为D: \mongodb-win32-x86_64-3.0.6,进入命令提示符状态,并进入bin目录,输入如下命令,即可安装MongoDB为windows系统服务,以便机器重启后wmdows能够自动启动MongoDB。命令如下: D: \mongodb-win32-x86_64-3.0.6\bin> mongod-dbpath D: \MgW2k8Data\-logpath D: \MgW2k8Data\mglg.log --directoryperdb-serviceName MongoDataBase -serviceDisplayNameMongoDataBase --install 点击“开始”,“运行”,输入services.msc,打开服务面板,找MongoDataBase服务,右击服务属性,即可打开如下对话框,首次服务是没有启动的,需要手工将他启动,并将启动类型设置为“自动”状态,今后该服务将伴随OS自动启动。 2 基于ASP.NET的MongoDB存储开发 2.1 开发平台搭建与页面设计 选择了ASP.NET C#编程语言和Windows 7平台实现项目开发,在操作系统下首先安装Visual Studio 2012和.NET Framework 4.5,然后从mongodb-win32-x86_64-3.0.6安装包中找出MongoDB的驱动文件MongoDB.Bson.DLL和MongoDB.Driver.DLL文件,待加入项目文件,具体步骤如下: STEP 1:建立ASP.NET WEB应用程序,并加入MongoDB.Bson.DLL和MongoDB.Driver.DLL到应用程序的Bin目录,使用添加引用的方法加入这两个DLL文件。建立testBSON.aspx页面,在testBSON.aspx.cs文件引用相关命名空间,具体引用方法如下:using MongoDB.Bson; using MongoDB。Driver; using System.Drawing; using System.10。编译该项目,检查其是否正常,项目若正常,进入STEP 2。
STEP 2:在testBSON.aspx页面中加入若干控件,主要有2个Button对象、1个FileUpload对象和1个Image对象,对象名称分别为btnSaveFile(保存文件)、btnDownFile(下载文件)、FileUploadl、Imagel。 STEP 3:分别为btnSaveFile和btnDownFile增加单击事件,btnSaveFile_Click()及btnDownFile_Click()。最后在选择Internet Explorer进行测试,若成功继续后续环节。 2.2 MongoDB数据库对象初始化准备 定义相关对象并对各对象初始化,主要步骤如下: STEP 1:定义全局对象server和db,分别由MongoServer和MongoDatabase类创建。 STEP 2:定义函数InitMongoDB(),以实现对数据库的初始化。InitMongoDB()的主要功能有,在server对象中指定MongoDB的IP地址和端口号、在db对象中指定所连接MongoDB服务中的特定数据库。主要代码如下: void InitMongoDB(){ MongoServerSettings mg=new MongoServerSettings(); mg.Server=new MongoServerAddress("127.0.0.1",27017); server=new MongoServer(mg);//mongoDB服务器入口 db=server.GetDatabase(dbName);//获得数据库} STEP 3:调用初始化函数。页面初始化时,由Page_Load事件调用InitMongoDB(),关键代码如下: protected void Page_Load(object sender, EventArgs e){ InitMongoDB();) 2.3 MongoDB中文件存储与下载实现 2.3.1 文件上传实现方法 本研究中采用MongoDB的BSON文件存储方式,在“保存文件”的单击事件中调用SaveBSON()方法实现文件数据上传,btnSaveFile_Click(arg列表)函数的主要参数有byte[]bytelmg、strmg strFileName、string strExt、int iSize,他们分别表示文件数据流、文件名、扩展名和文件长度。具体步骤如下: STEP 1:从FileUploadl获得待上传文件的本地路径strFilePath; STEP 2:建立byte[]型缓冲区bytelmg,调用ReadAllBytes()填充该缓冲区; STEP 3:定义BsonDocument型对象doc,并准备各文件属性 STEP 4:调用db的GetCollection函数,指定MongoDB中的集合名称,具体代码:MongoCollection col=db.Get Collection(“MyFiles”); STEP 5:调用Col的Save方法向数据库中写入该BsonDocument型对象doc。 2.3.2 文件下载实现方法 首先建立MongoDB查询query,并在指定的集中查询相应的文件数据。获得MongoDB集合col(由MongoCollection类实现),根据每个文件的GUID,在MyFiles集合中找出相应文件,最后将查找出的文件字节流填入待输出缓冲区buff,最后调用Response.BinaryWrite()向浏览器输出文件,最终完成数据的下载: STEP 1:在Page_Load()事件中调用InitMongoDB()事件建立与MongoDB的连接; STEP 2:获取指定的文件集合col; STEP 3:根据指定的GUID在MongoDB建立查询query; STEP 4:从将查询结果粘贴到内存缓冲区buff中; STEP 5:解析该文档的属性信息,并用BinaryWrite方法输出到浏览器完成数据还原。 3 实验数据上传及下载测试 操作系统:Windows 7;编码环境:Visual Studio 2012; MongoDB版本:mongodb 3.0.6;测试数据:15MB文件块50块;测试场景:单用户单机测试和50用户同时上载15MB数据块测试。 测试结果:MongoDB数据在上传数据时,单机上载测试速度8.6MBps,下载测试时速度可达9.6MBps。50用户上传时,上载速度可达6.7 MBps,下载测试时速度可达9.1 MBps。实验未出现超时和死机现象,基本可满足互联网中非集中式数据存储需求。 4 结语 MongoDB是介于RDBMS和NoSQL之间的“集合型”数据库,功能丰富,支持的数据结构较松散自由,可以存储较复杂的数据类型,文件数据可以分组存储于数据集合,每一集合可能可以包含海量文档。互联网数据的急剧膨胀使得数据的查询也变得更加困难,据MongoDB软件开发联盟指出,当数据量达到50GB以上时,Mongo的数据库访问速度是MySQL的10倍以上。 探讨了当前互联网文件数据存储局限和困难,介绍了非关系型数据存储。阐述了MongoDB数据库存储原理,并给出了文件保存和下载的实现方法。实验证明,向MongoDB中存档不超过16MB的文件,性能最优,如果存储更大文件,可采用MongoDB的GridFS存储解决方案,下一步将围绕如何优化MongoDB存储系统开展工作。
|
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。