Asp.NetCore 3.1 EFCore处理Mysql的分库分表

Stella981
• 阅读 1153
  • 一、什么情况下需要分库分表?

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Peter20 Peter20
3年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
需求:统计WAIT\_ORDER表中的工单总数、未处理工单总数、已完成工单总数、未完成工单总数。表结构:为了举例子方便,WAIT\_ORDER表只有两个字段,分别是ID、STATUS,其中STATUS为工单的状态。1表示未处理,2表示已完成,3表示未完成总数。 SQL:  1.SELECT   2
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究