MongoDB与.NET 4.5的集成实践

MongoDB是一个高性能、开源、NoSQL数据库,广泛用于存储大量的数据。它使用文档导向的数据模型,非常适合存储复杂的数据结构。MongoDB支持多种编程语言的驱动,包括Java、.NET、PHP和JavaScript,使得数据访问变得简单快捷。本文将介绍MongoDB的基本概念,以及如何在.NET 4.5环境中实现MongoDB的集成

MongoDB的基本概念

MongoDB存储数据的格式为BSON(二进制JSON),它支持比传统JSON更多的数据类型。MongoDB提供了一个JavaScript shell来访问数据和进行管理操作。MongoDB的文档导向模型意味着存储的对象以文档的形式表示,这使得它们可以很容易地映射到在程序中操作的对象,类似于存储一系列对象的XML表示。

无模式(Schemaless)

在开发数据访问层时,通常需要使用ORM(对象关系映射)或者自己开发的映射,但无论哪种方式,它们都执行相同的任务,即处理和相关对象映射。与常规的关系数据库不同,MongoDB允许存储复杂的数据(实体与表格、嵌套、集合),不需要执行各种SQL查询来获取或更新数据。

分片(Sharding)

从1.2版本开始,MongoDB集成了分片管理,这使得数据库具有更好的可扩展性。MongoDB的数据是一致的,因为它总是访问所有的数据。分片的概念不是在主/主模式下拥有多个数据库,而是一个数据库将自己的数据分布在不同的实例上。

GridFS

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类。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485