MongoDB非结构化数据解决方案
随着WEB2.0 的应用和发展,一些新型互联网应用,如社交网络、博客(Blog)、个人视频分享、个性化信息租用服务等应用不断涌入人们眼帘,并逐渐成为人们生活的一部分。云计算为这些新型应用提供了计算手段,云存储为这些应用提供了存储方案。
目前,数以亿计的网络用户通过个人电脑、智能手机等终端访问Internet ,据中国互联网络信息中心(CNNIC) 在2012 年1 月16 日发布的中国互联网发展状况统计报告中显示,截止2011 年12月底,中国网民突破5 亿,其中手机网民达3.56亿,且同前期相比呈不断增长趋势。网络用户在浏览信息的同时,产生了海量的格式多样的新数据,在这些数据中,诸如文档、音乐、图片、视频一类的非结构化信息占比相当大。面临用户端的日益膨胀和海量数据的持续产生,尽管高性能处理器已基本满足了运算需求,却对无限大的存储空间和无限大的网络带宽需求力不从心。因此,在信息系统设计中,计算设计已经不再是应用的中心,而数据的妥善存储和管理成为系统设计的焦点。
1 非结构化数据存储发展进程
当前,互联网中的数据包括非结构化数据和半结构化的数据,非结构化信息又以二进制文件为主。制约海量非结构化数据存储的关键问题是,数据中心与异构终端间的数据共享程度不够强,存储系统的高并发读写能力欠缺,存储系统的自由扩展比较困难。针对移动计算的海量存储需求,深入研究非结构化数据的存储发展过程,这有助于开发出具有高共享、高吞吐和高并发能力的网络存储系统。
传统存储技术中,文件系统是可持久存储和管理数据的普遍手段。文件的管理方式主要有单机文件系统、网络文件系统、分布式文件系统和高通量文件系统等。在单机文件系统中,十亿兆位字节文件系统(ZFS, Zettabyte File System) 是应用较成功的典范,该系统由Sun 公司于2005 年11 月正式发布,是针对ZB 级数据存储需求而设计的128 位UNIX 文件系统,ZFS 引入“存储池”的概念管理物理存储空间,采用写时复制事务模型来维护数据一致性。由于该系统不能跨越数据的物理位置,同时没有妥善地解决数据传输通道的瓶颈问题,且系统复杂度较高,最终没有得到推广。
网络文件系统(NFS, Network File System) 的出现,使得跨平台的非结构化数据共享成为可
能,数据存储通过远程过程调用(RPC, Remote Procedure Call) 机制实现,使远程文件本地化,用户存取远程文件如同访问本地文件一样方便,但NFS 的服务器架构过于单一,决定其扩展性受到局限。
搜索引擎的出现,使得用户得以免费获取快速检索信息的便利,这一便利是建立在海量存储
和海量计算基础上的。为使用户检索到最新的信息,新增的非结构化型WEB 快照数据需要及时存储到服务器上,便于分析处理和建立索引,尽管此时已经出现基于高性能计算(High Performance Computing, HPC)的并行文件系统,然而成本高昂、当节点、网络或磁盘阵列出现故障后需停机恢复,不适合在线维护。而后,Google 公司提出一种基于集中式管理、分布式存储的全新存储架构,即Google File System(GFS),该架构将非结构化数据按64MB 的粒度存储于各子结点上[3]。这些系统与特定应用的耦合度高,表现出适应性差的缺点。
非结构化数据存储技术与文件系统及其存储技术的发展密切相关,更与数据库的发展密不可分。使用与操作系统、数据库系统无缝结合而形成的新型存储技术取代传统存储解决方案是必然的。
2 非关系型数据库(Not Only SQL,NoSQL)
传统的关系数据库在高并发读写、高吞吐率的海量数据存取、高可用性和高可扩展性需求方面表现得不尽如意。针对海量非结构化数据存储管理难题,研究者致力于寻求一种可靠的、低成本的和易实施的存储解决方案,在此情况下,出现了诸如Tokyo Cabinet 、MongoDB 、CouchDB 等非关系型数据库(Not Only SQL, NoSQL) 。NoSQL 数据库打破了传统关系数据库的事务一致性及范式约束,放弃了关系数据库强大的SQL 查询语言,采用 格式存储数据,保证系统能提供海量数据存储的同时具备优良查询性能。
2.1 NoSQL数据库特性
NoSQL 数据库系统通常具有以下六个特性。
1)对多个服务器进行简单的水平扩展即可实现吞吐量的提高;
2)具有在多服务间进行复制和分发数据的能力;
3)与SQL 数据绑定相比,NoSQL 的存储调用接口和协议更加简单;
4)传统数据库系统的事务处理具有四个特性:原子性、一致性、隔离性和
持久性(Atomicity,
Consistency, Isolation, Durability, ACID),为增强新型数据库系统的可伸缩性,NoSQL 系统放弃了部分ACID 特性;
5)利用分布式索引和随机存储器实现高效的数据存储;
6)具有动态添加新属性和数据记录的能力。
满足以上特性的NoSQL 数据库比较多,大致可分为三类。一类是满足较高读写性能需求的 型数据库,如Redis 、ToKyo Cabinet等,另一类是可满足海量存储需求和良好查询性能的面向文档的数据库,如MongoDB 、CouchDB 等,还有一类是支持高可扩展性和可用性的分布式数据库,如Cassandra 、Voldmort 等。结合非结构化数据存储管理,本研究选用了MongoDB 数据库,并重点介绍其在.NET Framework 下的开发和应用。
2.2 MongoDB存储体系结构
MongoDB 是一款基于JSON(JavaScript Object Notation) 的非关系型数据库,可将一个文档或文件以BSON(Binary JSON) 的格式存入其中。JSON 是一种轻量级的数据交换格式,以一种特定的字符串表示JavaScript 对象,这种交换格式易于阅读和编写,同时也易于机器解析和生成。BSON 是JSON 的二进制表示形式,同JSON 一样,支持内嵌的文档对象和数组对象。以BSON 格式存储的非结构化数据, 在MongoDB 数据库中称之为文档(Document),每个文档可理解为关系数据库中的一条记录(Record),若干记录使用集合(Collection) 统一管理,若干集合属于同一个数据库,如此一来,文件数据可直接存储于数据库中,其存储结构如图1 所示,与关系型数据库相比,其数据的逻辑结构对比如表1所示。
WEB2.0 环境下,已出现过将视频、音乐等二进制大对象直接存储入RDBMS 的存储技术,但须以同构的记录形式存储,而MongoDB 具有支持异构数据存储的优点,是RDBMS 所不能及的。因此,使用MongoDB 可实现非结构化数据的统一管理。
MongoDB 简介:
1. 一个分布式文件存储数据库,由C++语言编写的开源项目。
2. 一个NoSQL 中,功能最丰富、最像关系数据库的产品。
3. 它支持的数据结构非常松散,是类似JSON 的BSON 格式,因此可
以存储比较复杂的数据模型。
4. 它支持的查询语言非常强大,其语法有点类似于面向对象的查询
语言,而且还支持索引、MapReduce 等功能。
MongoDB 主要特点:
1. 高性能、易部署、易使用,存储数据方便。
2. 模式自由,支持动态查询、完全索引、文档内嵌查询。
3. 面向文档,以K/V形式存储数据,Key 用于唯一标识,而Value
则可以是各种复杂的数据类型。
4. 支持主/从服务器间的数据复制和故障恢复。
5. 自动分片,以支持云级别的服务伸缩性,可动态添加、删除额外
的服务器。
MongoDB 适用场景
1. 网站动态数据,需要实时的插入,更新与查询。
2. 可以做高性能的持久化缓存层。
3. 存储大尺寸,低价值的数据。
4. 高伸缩性的集群场景。
5. 文档化结构的数据存储及查询。