.NET开发者如何使用MyCat

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET开发者如何使用MyCat相关的知识,希望对你有一定的参考价值。

背景

在开发中,我们设计的系统的效率在很大程度上会受到数据库引擎单表的性能制约,因此在数据量庞大、或记录过宽时,需要考虑分库分表从而减轻数据库压力,提升查询效率。此外配置读写分离,让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。使用读写分离最大的作用无非是环境服务器压力。

什么是MyCat?

从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了mysql协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。

MyCat的优势

  • 基于阿里巴巴的开源项目Cobar,具备良好的稳定性、可靠性、优良的结构和优良的性能,拥有许多的项目案例。站在巨人的肩膀上,MyCAT将走的更远。

  • 广泛借鉴最好的开源项目和创新的理念,让这些融入MyCAT的基因,使MyCAT成为领先其他电商等类似的开源项目,甚至超过了一些企业级应用。

  • MyCAT技术团队的参与者都经历过至少五多年的项目经验,团队中包括一些高级软件工程师、架构师、DBA。由精英们组成的MYCAT技术团队将确保产品质量。

  • MyCAT是完全独立的社区,不依附于任何企业,遵循着完全开放、免费、开源的原则。它不像一些开源项目,重要的功能封闭在其商业产品,并使开源项目像一个装饰。

  • 支持超过60种的数据库作为数据节点,如MySQL、SQL Server、Oracle、MongoDB、DB2等

MyCat与ADO.NET

由于MyCAT与MySQL协议有些许差异,开发者可能不能够直接使用Oracle官方提供的Mysql.Data(ADO层)来与MyCAT直接连接,因此我们专门为.NET开发者设计了针对MyCAT优化过的ADO层驱动,即,开发者通过使用MyCatConnection、MyCatCommand类可以实现对MyCAT的连接与查询。下面将展示一个简短的使用MyCat for ADO.NET来向MyCAT写入数据。

首先将NuGet包 Pomelo.Data.MyCat 添加至 project.json 中:

{
  "version": "1.0.0-*",
  "buildOptions": {    "emitEntryPoint": true  },

  "dependencies": {    "Microsoft.NETCore.App": {      "type": "platform",      "version": "1.0.0"    },    "Pomelo.Data.MyCat": "1.0.0-*"  },

  "frameworks": {    "netcoreapp1.0": {      "imports": "dnxcore50"    }  }}

MyCatConnectionMyCatCommand等内容在命名空间 Pomelo.Data.MyCat 中. 按照常规的ADO.NET开发流程即可实现对MyCAT的操作。

using Pomelo.Data.MyCat;namespace MyCatAdoSample{  

 public class Program    {      

      public static void Main(string[] args)        {      

          using (var conn = new MyCatConnection(

"server=localhost;database=adosample;uid=root;pwd=yourpwd"))            {                conn.Open();      

         using (var cmd = new MyCatCommand(

"INSERT INTO `test` (`content`) VALUES ('Hello MyCat')"

, conn))                {                    cmd.ExecuteNonQuery();                }            }        }    } }

MyCat 与 Entity Framework Core

由于MyCAT的协议与MySQL有所差异,导致了无论是Java平台下的Hibernate还是.NET下的Entity Framework都无法使用MySQL的EF provider来操作MyCAT,这点在Migrations以及Code First上表现的尤为明显,此外开发者不仅需要手动建库,还需要配置分片规则等,操作繁琐。

因此我们特地开发了专门为MyCAT量身打造的Entity Framework Core Provider,即。

下面我们将详细介绍如何在Ubuntu 14.04 Server中部署MyCAT,以及使用Entity Framework Core来使用Code First模式使用MyCAT,并使用EF的Migration功能来创建数据库以及进行迁移工作。

1、在服务器中安装Java8、MySQL5.7以及.NET Core SDK

# add-apt-repository ppa:webupd8team/java
# apt-get update# apt-get install oracle-java8-installer # wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb # dpkg -i mysql-apt-config_0.6.0-1_all.deb # apt-get update
# apt-get install mysql-community-server
# sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
# apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
# apt-get update# apt-get install dotnet-dev-1.0.0-preview2-003121

2、下载 和 ,将MyCat Server解压至/usr/local/mycat中,将Pomelo.EntityFrameworkCore.MyCat.Proxy解压至~/proxy

并编辑~/proxy/config.json,将MyCatRoot设置为/usr/local/mycat

3、进入~/proxy目录,启动MyCat for Entity Framework Core的代理程序:

nohup dotnet Pomelo.EntityFrameworkCore.MyCat.Proxy.dll

4、创建一个.NET Core控制台程序,并将添加至project.json中。

5、创建模型,如创建一个Blog模型:

using System;
using System.ComponentModel.DataAnnotations;

namespace MyCatDemo.Models {  
   public class Blog
       {      
     public long Id { get; set; }        [MaxLength(64)]    
        public string Title { get; set; }    
        public string Content { get; set; }      
        public DateTime Time { get; set; }    } }

6、创建DbContext类,并重写DbContext中的OnConfiguring方法,配置数据节点以及MyCAT服务器信息

protected override void OnConfiguring(
            DbContextOptionsBuilder optionsBuilder)

{    base.OnConfiguring(optionsBuilder);    optionsBuilder.UseMyCat(
"server=192.168.0.129;database=blog;uid=test;pwd=test")
// MyCAT连接字符串        .UseDataNode("192.168.0.129", "blog_1", "root", "123456")
// 数据节点连接信息        .UseDataNode("192.168.0.129", "blog_2", "root", "123456")        .UseDataNode("192.168.0.129", "blog_3", "root", "123456")        .UseDataNode("192.168.0.129", "blog_4", "root", "123456"); }

7、编写Main方法中的逻辑,向数据库中插入数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MyCatDemo.Models;

namespace MyCatDemo{  
   public class Program    {      
        public static void Main(string[] args)        {        
           var DB = new SampleContext();  
           for(var i = 0; i < 100; i++)            {                DB.Blogs.Add(new Blog
            {
             Title = "New post #" + i,
            Content = "Hello mycat",
             Time = DateTime.Now });            }            DB.SaveChanges();            Console.Read();        }    } }

8、在控制台中执行dotnet ef migrations add Initdotnet ef database update来创建数据库。

9、运行控制台程序。

10、使用Navicat或其他工具查看各个节点数据情况

最后附上示例的完整屏幕录像


相关文章:



.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

以上是关于.NET开发者如何使用MyCat的主要内容,如果未能解决你的问题,请参考以下文章

推荐net开发cad入门阅读代码片段

Mycat作为Mycat核心开发者,怎能不来一波Mycat系列文章?

ASP.net MVC 代码片段问题中的 Jqgrid 实现

mysql主从同步+mycat读写分离+.NET程序连接mycat代理

Mysql+Mycat实现数据库主从同步与读写分离

使用mycat配置分库失败查看日志报错“NoRouteToHostException: 没有到主机的路由“