- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于mongoDB和C#分布式海量文件存储实验
本实验将按以下几步进行:实验环境monodevelop ,ubuntu10.04,实验目的:探索分布式文件存储方案
1、单机小文件的存储,逐步增加上传文件的大小,观察mongoDB中文件对磁盘分配大小的变化。
2、采用分片的方式存储大量的数据
实验一:
首先建立一个数据库gywdb,上传一个574.5kB大小的文件,代码如下:
View Code
using System;
using System.Collections;
using System.Collections.Generic;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.GridFS;
namespace mongoDBClient
{
class MainClass
{
public static void Main (string[] args)
{
//mongoDb服务实例连接字符串
string con=mongodb://localhost:27017;
//得到一个于mongoDB服务器连接的实例
MongoServer server=MongoServer.Create(con);
//获得一个与具体数据库连接对象,数据库名为gywdb
MongoDatabase mydb=server.GetDatabase(gywdb);
//定义一个本地文件的路径字符串
string localFileName=/home/guoyuanwei/学习资料/Google三大论文中文版.pdf;
//定义mongoDB数据库中文件的名称
string mongoDBFileName=Google三大论文中文版;
//设置GridFS文件中对应的集合前缀名
MongoGridFSSettings fsSetting=new MongoGridFSSettings(){Root=gyw};
//实例化一个GridFS
MongoGridFS gridfs=new MongoGridFS(mydb,fsSetting);
//将本地文件上传到mongoDB中去,以默认块的大小256KB对文件进行分块
gridfs.Upload(localFileName,mongoDBFileName);
}
}
}
运行命令: show collectionsgyw.chunksgyw.files可以看到得到了一个前缀为gyw的文件元数据存储的集合gyw.files和存储文件数据块的gyw.chunks运行命令 db.gyw.chunks.find({},{_id:1,n:1}){ _id : ObjectId(4fc0a6d91d41c808f45cbfec), n : 0 }{ _id : ObjectId(4fc0a6d91d41c808f45cbfed), n : 1 }{ _id : ObjectId(4fc0a6da1d41c808f45cbfee), n : 2 }
得到3个块数据,因为文件总大小为574.5KB,每个块采用的是默认大小256KB,所以得到了3个块。此时磁盘文件系统中,mongoDB自动生成了3个文件分别是:
gywdb.0(大小为64MB),gywdb.1(大小为128MB),gywdb.ns(存储命名空间源数据),这里分配机制体现了mongoDB的文件分配策略,每个数据库有一个.ns文件和若干个数据文件
,数据文件以递增的数字结尾。每个新的以数字结尾的数据文件大小会加倍,直到达到最大值2GB,这是为了让小数据库不浪费太多的磁盘空间,同时让大数据使用磁盘上连续的空间。
MongoDB为了保证性能还会预分配数据文件,这意味着MongoDB服务器总是试图为每一个数据库保留一个额外的空数据文件,来避免文件分配所产生的阻塞。
接着利用上面的代码再上传一个大小为2.4MB大小的文件到mongoDB的文件系统中
运行命令: db.gyw.chunks.find({},{_id:1,n:1,files_i
文档评论(0)