.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层驱动,即Pomelo.Data.MyCat,开发者通过使用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"}}}
MyCatConnection
, MyCatCommand
等内容在命名空间 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,即Pomelo.EntityFrameworkCore.MyCat。
下面我们将详细介绍如何在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-getinstalloracle-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-getupdate# apt-getinstallmysql-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-keyadv--keyserver apt-mo.trafficmanager.net --recv-keys 417A0893# apt-getupdate# apt-getinstalldotnet-dev-1.0.0-preview2-003121
2、下载Pomelo.EntityFrameworkCore.MyCat.Proxy 和 MyCat Server,将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控制台程序,并将Pomelo.EntityFrameworkCore.MyCat
添加至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服务器信息
protectedoverridevoidOnConfiguring( 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{ publicstaticvoidMain(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 Init
和dotnet ef database update
来创建数据库。
9、运行控制台程序。
10、使用Navicat或其他工具查看各个节点数据情况
最后附上示例的完整屏幕录像
class="video_iframe" data-vidtype="1" style=" z-index:1; " height="375" width="500" frameborder="0" data-src="https://v.qq.com/iframe/preview.html?vid=x03233od6kw&width=500&height=375&auto=0" allowfullscreen>
相关文章:
MyCat:开源分布式数据库中间件
原文地址:http://www.1234.sh/post/mycat-getting-started-cn
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
.NET开发者如何使用MyCat相关推荐
- Asp.net Core 使用MyCat分布式数据库,实现读写分离
简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我们今天主要介绍一下,在我们的Asp.net Core中如何使用Myc ...
- MySQL在EF Core下的Scaffolding操作
Pomelo于2016年11月22日发布的MySQL for ef core中,增加了DbContext Scaffolding的支持,这项功能是让开发者可以从现有的数据库中提取表.列.索引及外键成为 ...
- 【Mycat】作为Mycat核心开发者,怎能不来一波Mycat系列文章?
写在前面 Mycat是基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得Mycat一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远. ...
- Mycat原理、应用场景
Mycat原理 Mycat的原理并不复杂,复杂的是代码,如果代码也不复杂,那么早就成为一个传说了. Mycat的原理中最重要的一个动词是"拦截",它拦截了用户发送过来的SQL语句, ...
- mycat和MySQL版本兼容_mycat下mysql jdbc connector使用高版本报PacketTooBigException异常
如下所示: 5.1.30切换为mysql-connector 5.1.46/40,报错,可参考https://blog.csdn.net/n447194252/article/details/7530 ...
- 专访Mycat核心开发成员王金剑 :借助Mycat轻松抵御海量并发
专访Mycat核心开发成员王金剑 :借助Mycat轻松抵御海量并发 发表于2015-12-25 14:51| 1401次阅读| 来源CSDN| 5 条评论| 作者夏梦竹 专访王金剑开发人员数据分析数据 ...
- 手把手带你用数据库中间件Mycat+SpringBoot完成分库分表
一.背景 随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘.IO.系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进 ...
- docker安装mycat_分布式数据库中间件 MyCat 搞起来!
关于 MyCat 的铺垫文章已经写了三篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! What?Tomcat 竟然也算中间件? ...
- mycat 不得不说的缘分
1,愕然回首.它在灯火阑珊处 关于mysql集群中间件.曾经写在应用程序里面,由开发者实现,在配置文件中面写多个数据源,写库一个数据 ...
最新文章
- Matlab数据的可视化 -- 三维表面图
- 如何使用ggplot2绘制左右分布的柱状图
- c# 加密解密帮助类
- 识别哈希算法类型hash-identifier
- 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
- 【POJ1321棋盘问题】【poj2251Dungeon Master】【poj3278Catch That Cow】【poj1426Find The Multi】
- 计算机无法安装系统,一招就能搞定“这台电脑无法安装 Windows 11”的解决方法...
- 与ln的指数转化公式_高考数学48条秒杀型公式与方法
- [Leedcode][JAVA][第55题][跳跃游戏][贪心][动态规划]
- ELKElasticSearch5.1基础概念及配置文件详解【转】
- android 8.1.0怎么截屏,vivo Z1i怎么截屏?4种vivo Z1i截图方法
- [转载] python字符串转有符号数字_在python中将字符串转换为8位带符号整数
- 电子计算机第一代到第四代,从第一代电子计算机到第四代计算机的体系结构都是由运算器、控制器、存储器、输入设备和输出设备组成的,称为( )体系结构。...
- 科技部部长:院士头衔不是学术不端挡箭牌!已有多位院士、校长等被“拿下”...
- .NET Core 如何验证信用卡卡号
- 虚拟服务器密码遗忘怎么办,win7虚拟机忘记密码怎么办_win7虚拟机忘记密码的解决方法...
- C#实现jQuery的方法连缀
- 格式化数字,逢千位数加逗号
- html+js 实现鼠标粒子拖尾效果其中调用underscore和jQuery库
- C++ undefined symbol的问题分析和解决办法