• Asp.NetCore 3.1 EFCore处理Mysql的分库分表--MyCat解决方案


    • 一、什么情况下需要分库分表?

    Mysql单表数据量超过500万条。

    • 二、Asp.net Core 技术栈,分库分表的解决方案有哪些?

    1、阿里云的DRDS

    2、Mycat  ---数据库分库分表中间件;

    3、TiDB;

    • 三、以上3种解决方案各自的特点:

    1、阿里云DRDS是收费的商业版,价格稍贵,但是比SqlServer便宜多了;

    2、MyCat分库分表,单表数据量在500万--5000万用最适合;

    3、TiDB,单表数据量超过5000万以上最适合;

    4、3种解决方案都是详细的文档;

    5、使用过程中,运维维护成本,阿里云DRDS最方便最省事,TIDB其次,MyCat最差;钱多的就用阿里云DRDS.

    • 四、Asp.net Core 如何接入3种解决方案?

    1、跟直接连接Mysql基本一致;

    2、引用Oracle官方的Mysql组件;

    3、3种解决方案的sql有些出入,查看各自官方文档;

    • 五、至于性能如何? 

    1、阿里云的DRDS毋庸置疑,TIDB在处理5000万以上的量,优势最明显;如果量级达到这个级别,就不要选择MyCat了。

    2、MyCat的性能到底 如何,我们的项目目前也在初步试用中。

    • 六、Asp.Net Core 3.1 EFCore接入MyCat的详细步骤

    1、首要要自己安装MyCat,安装方法参照如下:

    http://www.zyiz.net/tech/detail-123157.html

    http://www.zyiz.net/tech/detail-123156.html

    安装好,配置好,启动;(配置方面,以后再讲吧)

    2、接下来我写个Demo的EFCore代码,大家可以自行修改,加入到自己的代码里。

    1、引用Oracle官方的MySql连接器:

    MySql.Data.EntityFrameworkCore

     注:用Pomelo.EntityFrameworkCore.MySql这个组件也没问题。

    2、创建数据实体和DBContext:

    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace NetCore3WebTest.Models
    {
        public class CourseContext: DbContext
        {
            //public CourseSContext(DbContextOptions<CourseSContext> options) : base(options)
            //{//沐雪大神在此
            //我的原创文章https://www.cnblogs.com/puzi0315/p/12608923.html,转载能留个出处吗?
            //}
            string connstr = "server=mysqldb.www.zyiz.net;port=8066;uid=root;pwd=123456;database=TESTDB";
            protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseMySQL(connstr);
    
            public DbSet<Course> course { get; set; }
     
        }
    
    
        public partial class Course
        {
            ///<summary>
            ///id
            ///</summary>
            public int id { get; set; }
            ///<summary>
            ///业务主键-年月-guid
            ///</summary>
            public string course_id { get; set; }
           ///<summary>
            ///课程名称
            ///</summary>
            public string course_name { get; set; }
           
    
        }
    
    }

    注:

    1、Mysql的端口号为3306,可以默认不写;但是MyCat的端口号为8066,必须指定;

    2、DBContext可以写在StartUp里,连接字符串可以写在appsettings.json里,我这里只是为了演示,简单写了。

    3、链接字符串说明:

    server=MyCat的服务器地址;port=8066;uid=MyCat在server.xml里配置的UserName;pwd=UserName的密码;database=MyCat配置里的schemas名称(非Mysql的库名称)

    解释的够清楚了吧!!

    3、测试:

      using(var db=new  CourseContext())
                {
    
                    var list = db.Course.OrderBy(p=>p.id).ToList<Course>();
                    JsonResult js = Json(list);
                    return js;
    
                }

    至于新增、修改、删掉,跟以前的代码一致。就不一一演示了。MyCat的分库分表的配置,要看官方的文档介绍,一一配置好。

    官方的教程网址如下:http://www.mycat.io/document/mycat-definitive-guide.pdf

    文章如果你觉得好,能给个“推荐”不?

  • 相关阅读:
    Docker可视化管理工具Portainer
    Spring Cloud,Docker书籍资源、优秀博文等记录
    Grafana部署监控docker服务
    Grafana+Prometheus通过node_exporter监控Linux服务器信息
    Prometheus+Grafana+kafka_exporter监控kafka
    k8s gpu 资源设置
    mysql 塞数据
    idea 插件
    ubuntu 升级内核
    清华镜像站安装docker
  • 原文地址:https://www.cnblogs.com/puzi0315/p/12608923.html
Copyright © 2020-2023  润新知