欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

浅析MongoDB数据库的海量数据存储应用

程序员文章站 2022-05-28 15:30:21
...

当今已进入大数据时代,特别是大规模互联网web2.0应用不断发展及云计算所需要的海量存储和海量计算发展,传统的关系型数据库已无

【摘要】当今已进入大数据时代,特别是大规模互联网web2.0应用不断发展及云计算所需要的海量存储和海量计算发展,传统的关系型数据库已无法满足这方面的需求。随着NoSQL数据库的不断发展和成熟,可以较好地解决海量存储和海量计算方面的应用需求。本文重点描述作为NoSQL之一MongoDB数据库在海量数据存储方面的应用。

1 引言
NoSQL,全称是“Not Only Sql”,指的是非关系型的数据库。这类数据库主要有这些特点:非关系型的、分布式、开源的、水平可扩展的。原始目的是为了大规模web应用,这场全新的数据库革命运动早期就有人提出,发展至2009年趋势越发高涨。非关系型的数据存储通常的应用如:模式自有、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。它的种类繁多,如列式数据库(Hadoop/HBase、Cassandra、Hypertable、Amazon SimpleDB等)、文档型数据库(MongoDB、CouchDB、OrientDB等)、键值数据库(Azure Table Storage、MEMBASE、Redis、Berkeley DB、MemcacheDB等)、图形数据库(Neo4J、Infinite Graph、Sones、Bigdata等)、面向对象数据库(db4o、Versant、Objectivity、Starcounter等)、网格及云数据库(GigaSpaces、Queplix、Hazelcast等)、XML数据库(Mark Logic Server、EMC Documentum xDB、BaseX、Berkeley DB XML等)、多值数据库(U2、OpenInsight、OpenQM等)及其他非关系型数据库(如FileDB)等。
MongoDB属于NoSQL数据的一种,是由10gen公司提供的一个开源的、模式*的、面向文档存储的、分布式的数据库,是一个介于关系数据库和非关系数据库之间的产品。由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。他支持的数据结构非常松散,是类似Json的Bson格式,因此可以存储比较复杂的数据类型。
他可以运行在Solaris、Linux、Windows和OSX平台上,支持32位和64位应用,其中在32位应用中单个数据库最大容量为2G,在64位应用中存储容量大小只与实际存储空间大小有关,并且提供了Java、C#、PHP、C、C++、Javascript、Python、Ruby、Perl等多种语言的驱动程序,最新的生产版本为2.0,官方下载地址:。目前正在使用他的网站和企业已超过了100家,如视觉中国、大众点评网、淘宝网、盛大、Foursquare、Wordnik、OpenShift、SourceForge、Github等。
随着企业数据不断积累和增加及Web2.0应用不断向前发展,已进入了个人信息时代,对于大中型企业来说,可能每天将产生大量的数据,来之于各类系统,如各类文档(OA文档、项目文档等)、设计图纸、高清图片、视频等,对于员工来说,更关心的是个人信息方面的存储和计算,当这些信息量足够大时,想要实时提取或分析数据,传统集中式方式难以满足这方面的需求,因此采用分布式的存储和计算成为必然的选择,一方面主要解决海量存储问题,另一方面解决海量计算问题。采用MongoDB的数据库技术能有效地解决分布式方面的应用,本文重点分析MongoDB在海量数据存储方面的应用。
2 概述
2.1 MongoDB的主要特点
(1)文件存储格式为Bson,使用易于掌握和理解的Json风格语法。相对Json来说,Bson拥有更好的性能,主要表现为更快的遍历速度、操作更简易、增加了额外的
数据类型。
(2)模式*,支持嵌入子文档和数组,无需事先创建数据结构,属于逆规范化的数据模型,有利于提高查询速度。
(3)动态查询,支持丰富的查询表达式,使用Json形式的标记,可轻易查询文档中内嵌的对象和数组及子文档。
(4)完整的索引支持,包括文档内嵌对象和数据,同时还提供了全文索引方式,MongoDB的查询优化器会分析查询表达式,并生成一个高效的查询计划。
(5)使用高效的二进制数据存储,适合存储大型对象(如高清图片、视频等)。
(6)支持多种复制模式,提供冗余及自动故障转移。支持Master-Slave、Replica Pairs/Replica Sets、有限Master-Master模式。
(7)支持服务端脚本和Map/Reduce,可以实现海量数据计算,即实现云计算功能。
(8)性能高、速度快。在多数场合,其查询速度对于MySQL要快的多,对于CPU占用非常小。部署很简单,几乎是零配置。
(9)自动处理碎片,支持自动分片功能实现水平扩展的数据库集群,可以动态添加或移除节点。
(10)内置GridFS,支持海量存储。
(11)可通过网络访问,采用高效的MongoDB网络协议,在性能方面要优于http或Rest协议。
(12)第三方支持丰富,MongoDB社区活跃,越来越多的公司和网站在生产环境中使用MongoDB进行技术架构优化,同时由10gen公司官方提供强大技术支持。
2.2 MongoDB的适用场景
MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。
(1)网站数据:MongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
(2)缓存:由于性能很高,MongoDB也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。
(3)大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
(4)高伸缩性的场景:MongoDB非常适合由数十或数百台服务器组成的数据库。MongoDB的路线图中已经包含对MapReduce
引擎的内置支持。
(5)用于对象及JSON数据的存储:MongoDB的Bson数据格式非常适合文档化格式的存储及查询。
2.3 MongoDB的体系结构
MongoDB是由一系列物理文件(数据文件,日志文件等)的集合与之对应的逻辑结构(集合、文档等)构成的数据库。
MongoDB的逻辑结构实际是一种层次结构,由文档(document,相当于关系数据库中的row)、集合(collection,相当于关系数据库中的table)、数据库(database,相当于关系数据库中的database)这三部分组成。
一个MongoDB实例支持多个数据库。在MongoDB内部,每个数据库都包含一个.ns文件和一些数据文件,采用预分配空间的机制,始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增带来的磁盘压力过大问题。每个预分配的文件都用0进行填充,数据文件每新分配一次,他的大小都会是上一个数据文件大小的2倍,每个数据文件最大为2G。
2.4 MongoDB与MS SQL Server的语句对照
MongoDB提供了功能丰富的查询表达式,可以实现绝大多数关系数据库的sql语句功能,以表employee(id,name,age)举例对照说明,如下图1所示。

浅析MongoDB数据库的海量数据存储应用

图1 MongoDB与MS SQL Server语句对照

3 过程分析与测试

3.1 GridFS概述