今已进入大数据时代,特别是大规模互联网web2.0应用不断发展及云计算所需要的海量存储和海量计算发展,传统的关系型数据库已无法满足这方面的需求。随着NoSQL数据库的不断发展和成熟,可以较好地解决海量存储和海量计算方面的应用需求。本文重点描述作为NoSQL之一MongoDB数据库在海量数据存储方面的应用。
由于MongoDB中的Bson对象大小是有限制的,在1.7版本以前单个Bson对象最大容量为4M,1.7版本以后单个Bson对象最大容量为16M[5]。对于一般的文件存储,单个对象的4到16M的存储容量能够满足需求,但无法满足对于一些大文件的存储,如高清图片、设计图纸、视频等,因此在海量数据存储方面,MongoDB提供了内置的Grid
基于GridFS的海量数据存储测试
本文主要采用MongoDB最新版2.0及官方提供的C#语言驱动进行测试。
同时有好几个第三方提供的客户端图形工具,如MongoVUE、RockMongo、MongoHub等,方便管理和维护。
GridFS结合自动分片及自动复制技术,可以实现高性能的分布式数据库集群架构,从而进行海量数据存储,
高性能的分布式数据库集群架构
MongoDB Sharding Cluster需要三种角色:
(1)Shard Server:即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。
(2)Config Server:用来存储所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。
(3)Route Process:这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个shard上查询或保存记录,再连接相应的shard进行操作,最后将结果返回给客户端,而这一切对客户端是透明的,客户端不用关心所操作的记录存储在哪个shard上。
为了测试方便,下面在同一台物理机器上构建一个简单的Sharding Cluster
批处理计算流程