MongoDB是一个高性能、开源、NoSQL数据库,广泛用于存储大量的数据。它使用文档导向的数据模型,非常适合存储复杂的数据结构。MongoDB支持多种编程语言的驱动,包括Java、.NET、PHP和JavaScript,使得数据访问变得简单快捷。本文将介绍MongoDB的基本概念,以及如何在.NET 4.5环境中实现MongoDB的集成。
MongoDB存储数据的格式为BSON(二进制JSON),它支持比传统JSON更多的数据类型。MongoDB提供了一个JavaScript shell来访问数据和进行管理操作。MongoDB的文档导向模型意味着存储的对象以文档的形式表示,这使得它们可以很容易地映射到在程序中操作的对象,类似于存储一系列对象的XML表示。
在开发数据访问层时,通常需要使用ORM(对象关系映射)或者自己开发的映射,但无论哪种方式,它们都执行相同的任务,即处理和相关对象映射。与常规的关系数据库不同,MongoDB允许存储复杂的数据(实体与表格、嵌套、集合),不需要执行各种SQL查询来获取或更新数据。
从1.2版本开始,MongoDB集成了分片管理,这使得数据库具有更好的可扩展性。MongoDB的数据是一致的,因为它总是访问所有的数据。分片的概念不是在主/主模式下拥有多个数据库,而是一个数据库将自己的数据分布在不同的实例上。
MongoDB内置了一个完整的文件系统GridFS。由于MongoDB每个文档的大小限制为4MB,GridFS允许存储大于4MB的文档。GridFS还允许在其文件上进行分片,因此不需要在机器之间进行rsync。GridFS可以轻松地与Hbase集成。
MongoDB的真正优势在于其查询管理,尤其是与Riak或CouchDB相比。MongoDB可以进行非常精细的查询,这得益于大量的关键字。可以进行与SQL查询一样丰富的查询,但都是在面向文档的数据库上进行的。
要在.NET4.5中集成MongoDB,可以使用MongoDB项目提供的官方驱动程序。以下是实现步骤:
将使用其他数据访问层(DAL)的经典机制,即在web.config中设置连接字符串:
<connectionStrings>
<add name="MongoDB" connectionString="mongodb://localhost"></add>
</connectionStrings>
设置应用程序的数据库名称:
<appSettings>
...
<add key="MongoDBName" value="MyTvProgram"/>
</appSettings>
在开始安装之前,需要下载MongoDB的最新版本。请访问以下地址:
选择想要的安装类型。要开始安装,只需双击msi包并按照屏幕上的说明操作。
创建一个文件夹来保存数据库c:\data\db和一个日志文件c:\data\log。
创建一个配置文件,允许配置MongoDB:mongod.conf。
可以使用位于bin文件夹中的mongod.exe程序开始使用MongoDB:
config mongod mongod.exe --config mongod.conf
还可以配置MongoDB作为服务:
mongod --config f:\conf\mongod.conf --install
配置MongoDB自动启动或手动启动:
sc config mongod start=auto
Windows Azure原生不支持MongoDB,但可以使用例如mongolab SAAS服务。如果需要支持免费的MongoDB集群,必须创建两个基本VM。
创建一个名为<yourcompany>mgdb1的VM。
创建另一个名为<yourcompany>mgdb2的VM。
为每个VM分配一个30GB的驱动器,并将其关联到字母f。
在每个VM上重复以下操作:
登录到第一台机器。
格式化数据磁盘。
禁用IE控制。
将http://*.mongodb.org添加到受信任站点列表。
下载64位版本。
安装MSI。
MongoDB默认安装在C:\Program Files\MongoDB\Server\3.2\bin,创建一个环境变量Path指向该文件。
下载并安装OpenSSL,这将允许为复制创建一个证书:
在驱动器f上创建2个文件夹:data和log。
创建1个conf文件夹。
添加一个mongod.conf文件。
添加必要的参数:
Port:默认监听的端口号27017。
dbPath:数据路径。
replSet Rs0:表示将使用复制。
logPath:指向日志文件的路径。
logAppend:表示旋转。
如果节点不是第一个,创建文件夹并复制第一个节点的mongodb keyfiles文件。
安装服务mongodb:
mongod --config f:\conf\mongod.conf --install
启动net mongdb服务:
Service start mongodb
如果这是第一个节点,登录到服务器并启动复制:
mongo rs.initiate replication ()
在防火墙中打开一个端口,以便连接到MongoDB服务。
在Windows Azure中为虚拟机配置一个TCP端口27017的端点。
如果这是第一个节点,在主节点上创建管理用户:
1. use admin
2. db.createUser ({
3. user: "siteUserAdmin",
4. pwd: "",
5. roles: [{role: "userAdminAnyDatabase", db: "admin"}]
6. });
7. db.createUser ({
8. user: "siteRootAdmin",
9. pwd: "",
10. roles: [{role: "root", db: "admin"}]
11.});
停止MongoDB实例。
仅在第一个节点上创建一个密钥文件,以便每个复制成员使用。
建议使用OpenSSL,但可以使用其他机制。
在每个成员上复制生成的密钥文件。
编辑配置文件以指定要使用的密钥文件。Keyfile。
在第一个服务器上重复操作。
将节点添加到复制中:
从新节点的主机机器,
连接到第一个节点:
mongo -u siteRootAdmin -p --authenticationDatabase admin
使用rs.add方法("nomdelamachine: 27017")添加节点。
检查复制配置。
从任何主机,
连接到第一个节点:
mongo -u siteRootAdmin -p --authenticationDatabase admin
使用rs.conf()方法。
重复在第1节和第2节中创建的库,在STPVideoPlayer.DataLayer项目中添加以下类:
EpisodeModel:描述一个剧集。
LocalVideoModel:描述一个本地视频文件。
YoutubeModel:描述托管在YouTube上的视频或播放列表。
TimeLineModel:描述一个计划。
为NuGet STPVideoPlayer.Data.MongoProvider项目安装MongoDB驱动程序。
创建一个TvPlayerRepository类。