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

关系型数据库MySQLNoSQL数据库
  • 一、什么情况下需要分库分表?

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.

picture.image

  • 四、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;  
  
 }
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生数据库 veDB 核心技术剖析与展望
veDB 是一款分布式数据库,采用了云原生计算存储分离架构。本次演讲将为大家介绍火山引擎这款云原生数据库的核心技术原理,并对未来进行展望。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论