65.9K
CodeProject 正在变化。 阅读更多。
Home

访问层轻快数据:MongoDB / .NET

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.75/5 (6投票s)

2016 年 2 月 19 日

CPOL

6分钟阅读

viewsIcon

18746

MongoDB,大家都在谈论它,本文将指导您一步一步地将其集成到 Microsoft .NET 中。

MongoDB 简介

什么是 MongoDB?

MongoDB 是由 10gen 公司赞助的面向文档的数据库。它尤其被 Foursquare、SourceForge 和 bit.ly 使用。

Mongo 以 BSON 格式(支持更多值类型的二进制 JSON)存储文档,并提供一个 JavaScript shell 来访问数据和执行管理操作。它实现了包括 Java、.Net、PHP、Javascript 在内的多种驱动程序。面向文档的基本概念意味着存储的对象以 BSON 文档的形式表示(不仅仅是键/值对映射),可以轻松地映射到我们在程序中操作的对象。您可以将其比作存储一系列对象的 XML 表示。

无模式:MongoDB NoSQL 与传统关系型数据库的比较

在开发数据访问层时,我们通常需要使用 ORM,或者使用我们自己开发的映射,但这两种方法都将执行相同的任务,即处理和映射相关对象。

更像是传统的关系型数据库不允许存储复杂数据(具有表、嵌套、集合的实体),我们必须执行各种 SQL 查询来获取或更新我们的数据。

鉴于以上两点,开发数据访问层需要大量工作。如今,我们正在浪费精力来实现技术和非功能性答案,而可以将精力投入到业务开发中,从而为客户带来优势。

为此,有一种解决方案:将 .NET 对象按原样存储,并让我们的持久化引擎为我们管理这项工作。 MongoDB 和 NoSQL 数据库允许实现这一梦想。这被称为无模式(schemaless)。

MongoDB 的分片是什么意思?

MongoDB 从 1.2 版本开始就集成了分片管理。这种管理机制的实现能够实现更大的可伸缩性。我们的数据是一致的,因为它总是可以访问所有数据。分片的理念不是拥有多个主/主数据库,而是拥有一个数据库,该数据库将自己的数据分布在不同的节点上。我们会遇到在某个实例上存储一些数据,在另一个实例上存储其他数据的情况。本文不详细介绍这方面的内容。

GridFS 是什么意思?

MongoDB 内置了一个完整的文件系统。这个系统就是 GridFS。MongoDB 对每个文档的大小限制为 4MB,但我们很快就需要存储更大的文档。GridFS 就可以做到。因此,我们将大于 4MB 的任何文档存储在 GridFS 文件系统中。GridFS 还允许对文件进行分片。因此,我们不需要在机器之间进行 rsync。GridFS 可以自己完成这项工作。您可以轻松地将 Hbase 迁移到 GridFS。

高级查询系统

在我看来,MongoDB 的真正兴趣所在,尤其与 Riak 或 CouchDB 相比,是它的查询管理。它可以通过大量的关键字进行非常精细化的查询。我们可以进行类似于 SQL 的丰富查询,但所有这些都是在面向文档的数据库上进行的。
例如,可以搜索所有数组中包含多个元素的文档
db.things.find ({a: {$ all: [2, 3]}});
而在 SQL 中,我们会这样做
select * from things WHERE a LIKE '% 2%' AND has LIKE '% 3%'
但这并不完整,因为最终它会适用于一个包含数组 [32] 的“To”字段,而 SQL 也会起作用,但对于 MongoDB 查询中的情况则无效。
我们还可以通过提供来搜索
Javascript db.myCollection.find ({$ where "this.a> 3"});
它是高度模块化的,并且关键字的数量正在不断增加。

.NET 4.5 入门

有很多实用库可以与 MongoDB 通信,我建议您坚持使用 MongoDB 项目本身提供的标准驱动程序。

要实现的数据访问层架构 MongoDB

设置层

我们将使用其他 DAL 的经典机制。即在 web.config 中使用 connectionstring 来设置服务器

 < connectionStrings >
    < add name="MongoDB" connectionString="mongodb: // localhost" > < / add >
< / connectionStrings >

应用程序设置中的数据库名称

 < appSettings >
...
< add key="MongoDBName" value="MyTvProgram" / >
< / appSettings >

在本地计算机上安装 MongoDB(单实例)

  1. 在开始安装之前,您必须下载最新版本的 MongoDB。为此,请访问以下地址:https://mongodb.ac.cn/downloads 并选择您想要的安装类型。
  2. 要开始安装,只需双击 msi 包并按照屏幕上的说明进行操作。
  3. 创建一个文件夹来存放您的数据库 c:\data\db 和一个日志文件 c:\data\log
  4. 创建一个配置文件,允许您配置 mongodb:mongod.conf
  5. 您可以使用 bin 文件夹中的 mongod mongod.exe 程序启动:config mongod mongod.conf
  6. 您也可以将 mongod 配置为服务:mongod mongod.conf config --install
  7. 配置 mongod 自动或手动启动:sc config mongod start=auto

在 Windows Azure 上托管带复制的 MongoDB 数据库

Windows Azure 原生不支持 MongoDB,您可以使用 mongolab SAAS 服务,但它有限制。因此,您需要创建两个基本 VM 来支持一个免费的 MongoDB 集群。

  1. 创建一个名为 <yourcompany> mgdb1 的 VM
  2. 创建另一个名为 <yourcompany> mgdb2 的 VM
  3. 为您的每个 VM 分配一个 30GB 的驱动器,并将其分配字母 f。

在每个 VM 上重复以下操作

  1. 登录到您的第一台机器
  2. 格式化您的数据磁盘
  3. 禁用 IE 增强安全配置。
  4. 将 http://*.mongodb.org 添加到受信任站点列表。
  5. 下载 64 位版本。
  6. 安装 MSI
  7. MongoDB 默认安装在 _C:\Program Files\MongoDB\Server\3.2\bin_,创建一个指向该文件的 Path 环境变量。
  8. 下载并安装 OpenSSL,这将允许您为复制创建证书:_https://slproweb.com/download/Win64OpenSSL_Light-1_0_2f.exe_
  9. 在您的 f 驱动器上创建 2 个文件夹:data 和 log
  10. 创建一个 conf 文件夹
  11. 添加一个 mongod.conf 文件
  12. 添加必要的参数
    • Port:监听的默认端口号为 27017
    • dbPath:数据路径
    • replSet Rs0 =:表示将使用复制
    • logpath:指定日志文件的路径
    • logaappend:表示日志轮转
  13. 如果该节点不是第一个节点,请创建文件夹并将第一个节点的 mongodb keyfiles-file 复制过来。
  14. 安装 MongoDB 服务 mongod --config f:\conf\mongod.conf --install
  15. 启动 MongoDB 服务 net mongdb Service start mongodb
  16. 如果是第一个节点,请登录服务器并启动 mongo rs.initiate replication()
  17. 在防火墙中打开一个端口,以便连接到 MongoDB 服务。
  18. 为虚拟机配置 Windows Azure 上的一个端口,端口号为 TCP 27017。
  19. 如果是第一个节点,请在主节点上创建管理员用户。
    1. use admin
    2. db.createUser ({
    3. user: "siteUserAdmin"
    4. pwd: "< password >"
    5. Actual: [{role: "userAdminAnyDatabase" db "admin"}]
    6.});
    7. db.createUser ({
    8. user: "siteRootAdmin"
    9. pwd: "< password >"
    10. Actual: [{role: "root", db: "admin"}]
    11.});
  20. 停止 mongodb 实例。
  21. 只为第一个节点创建一个密钥文件,供复制的每个成员使用。
    • 我建议使用 openssl,但您也可以使用其他机制。
    • 将生成的密钥文件复制到每个成员。
    • 编辑配置文件以指定要使用的密钥文件。Keyfile
    • 在第一个服务器上重复此操作。

将节点添加到复制集。

  1. 从新节点的宿主机器上,
  2. 连接到第一个节点 mongo <premiernoeud> -u siteRootAdmin -p <password> --authenticationDatabase admin
  3. 使用 rs.add 方法 ("nomdelamachine: 27017") 添加节点。

检查复制配置。

  1. 从任何主机
  2. 连接到第一个节点 mongo <premiernoeud> -u siteRootAdmin -p <password> --authenticationDatabase admin
  3. 使用 rs.conf () 方法。

在 Visual Studio 2015 中开发数据访问层

  1. 在我们的第 1 和第 2 部分中重复创建的库,
  2. 在 STPVideoPlayer.DataLayer 项目中,添加以下类:
    • EpisodeModel:描述一个剧集。
    • LocalVideoModel:描述一个本地视频文件。
    • YoutubeModel:描述一个托管在 YouTube 上的视频或播放列表。
    • TimeLineModel:描述一个时间表。
  3. 在 STPVideoPlayer.Data.MongoProvider 项目中安装 MongoDB 驱动程序。

  4. 创建一个 TvPlayerRepository 类。
  5. 通过实现 ITvPlayerRepository 接口来实现我们 provider 的代码。
© . All rights reserved.