【愚公系列】2022年05月 .NET架构班 056-分布式中间件 .Net Core下Mongodb基本使用

举报
愚公搬代码 发表于 2022/05/04 23:31:57 2022/05/04
【摘要】 前言 1.什么是MongoDBMongoDB是文档数据库,专门用来存储类似Json文档的数据库。 2.什么是文档json,xml ,yaml这些就是文档。mongodb主要是用来存储什么文档呢,主要是存储Bson文档,Bson文档和json是类似的,不同在于Bson文档主要是可以添加数据类型。 一、Mongodb诞生背景 1.单体电商系统需求:查询订单实现过程,客户端发起查询请求—>电商系...

前言

1.什么是MongoDB

MongoDB是文档数据库,专门用来存储类似Json文档的数据库。

2.什么是文档

json,xml ,yaml这些就是文档。mongodb主要是用来存储什么文档呢,主要是存储Bson文档,Bson文档和json是类似的,不同在于Bson文档主要是可以添加数据类型。

一、Mongodb诞生背景

1.单体电商系统

在这里插入图片描述
需求:查询订单实现过程,客户端发起查询请求—>电商系统—->电商数据库—>订单表和商品表进行关联。

问题:如果电商系统并发量,业务量,数据量全部上升之后,单体系统查询,添加,修改,删除性能会急剧下降。进一步甚至会导致系统宕机(宕机也就是无法访问),如果系统出现了宕机问题,直接导致客户端无法访问。

解决方案:需要进行业务模块拆分,形成电商微服务系统。

2.电商微服务系统

在这里插入图片描述
需求:查询订单实现过程,客户端发起查询请求—>电商网站—->订单微服务—>电商数据库。​ 电商网站—->商品微服务—>电商数据库。

问题:一次订单查询需要涉及到2个微服务(订单微服务、商品微服务)查询。如果并发量比较大,会导致两个微服务查询性能下降。因为是同步请求,同步请求并发处理有限。如果2个微服务其中一个微服务宕机了,会导致无法进行查询。

解决方案:使用MongoDB

3.电商微服务系统-MongoDB

在这里插入图片描述
查询订单实现过程,客户端发起查询请求—>电商网站—->MongoDB。

在MongoDB中可以一次性查询出订单商品数据。而且还可以提升性能。这就是我们在电商系统中使用MongoDB原因

二、Mongodb前提准备

1.MongoDB

​ MongoDB下载地址:https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-5.0.7-rc1-signed.msi

2.MongoDB Compass

​ MongoDB Compass下载地址:https://downloads.mongodb.com/compass/mongodb-compass-1.31.1-win32-x64.zip

三、启动Mongodb

1.先进入到MongoDB中

在这里插入图片描述

2.然后打开MongoDB.conf配置,在里面添加

# Where and how to store data.
storage:
  dbPath: D:\work\net\mongodb\MongoDB-5.0.6\data
  journal:
    enabled: true
#  engine:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  D:\work\net\mongodb\MongoDB-5.0.6\log\mongod.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

3.启动MongoDB

mongod.exe –config “D:\work\net\mongodb\MongoDB-5.0.6\bin\mongod.cfg”

在这里插入图片描述

四、.Net Core下Mongodb基本使用

1.下载对应的包

MongoDB.Driver

2.封装

创建ProductController类,在ProductController类中添加代码

/// <summary>
/// 商品服务接口
/// </summary>
public interface IProductService
{

    void Create(Product Product);
    public void CreateList(List<Product> Products);

    IEnumerable<Product> GetProducts();
    Product GetProductById(string id);
    public IEnumerable<Product> GetProductsByPage(int Page, int PageSize);
    public IEnumerable<Product> GetProductsBySort(Product product, int Page, int PageSize);
    public IEnumerable<int> GetProductsByAggregation(Product product);
    void Update(string id,Product Product);
    public void UpdateList(string id, Product Product);
    // 更新字段
    public void UpdateFiled(string id, ProductUpdateFiledDto productUpdateFiledDto);
    void Delete(Product Product);
    public void DeleteList(Product Product);
    bool ProductExists(string id);

    // 字段修改
    public void Replace(string id, Product Product);

    // 创建索引
    public string CreateIndex();
}
 /// <summary>
/// 商品服务实现
/// </summary>
public class ProductService : IProductService
{
    private readonly IMongoCollection<Product> _products;

    public ProductService()
    {
        // 1、建立MongoDB连接
        var client = new MongoClient("mongodb://localhost:27017");
        // 2、获取商品库(自己创建商品数据)
        var database = client.GetDatabase("ProductDB");

        // 3、获取商品表(自己创建商品数)
        _products = database.GetCollection<Product>("Product");
     
    }

    public void Create(Product Product)
    {
        _products.InsertOne(Product);
    }
 }

3.配置

在ConfigureServices中注册

services.AddSingleton<IProductService,ProductService>();

4.注入到控制器

/// <summary>
/// 商品服务实现
/// </summary>
public class ProductService : IProductService
{
   private readonly IMongoCollection<Product> _products;

   public ProductService()
   {
       // 1、建立MongoDB连接
       var client = new MongoClient("mongodb://localhost:27017");
       // 2、获取商品库(自己创建商品数据)
       var database = client.GetDatabase("ProductDB");

       // 3、获取商品表(自己创建商品数)
       _products = database.GetCollection<Product>("Product");
    
   }

   public void Create(Product Product)
   {
       _products.InsertOne(Product);
   }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。