.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"    }  }}

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,即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-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、下载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服务器信息

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或其他工具查看各个节点数据情况

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

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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/328683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Icon,Image,ImageIcon的简单的对比参考 上篇

转载自 关于Icon&#xff0c;Image&#xff0c;ImageIcon的简单的对比参考 上篇其实就算是现在&#xff0c;我还是有不少地方概念模糊&#xff0c;但是下面的内容是是没有什么问题的。稍微介绍一下&#xff0c;或许有些地方我无法解释&#xff1a; 大部分内容都是查的Java SE…

移动端为什么拿不到本地运行的web工程数据

原因很简单 连接的是远程服务器的tomcat啊啊啊啊啊

道指mt4代码_剑指offer算法题052:正则表达式匹配

小编在求职找找工作期间剑指offer上的算法题刷了很多遍&#xff0c;并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现&#xff0c;小编每天和大家分享一道剑指offer上的算法题&#xff0c;以及小编总结的答案。下面是第…

.NET 程序集单元测试工具 SmokeTest 应用指南

Smoke Test(冒烟测试)&#xff0c;也称Regression Test(回归测试)&#xff0c;是对软件的安装和基本功能的测试。一般地我们使用脚本来实现Smoke Test的自动化&#xff0c;可借用虚拟机的snapshot机制来保证干净的环境来进行Smoke Test&#xff0c;然后将测试好的程序集成到Con…

JavaFX将Node导出为图片

转载自 JavaFX将Node导出为图片在JavaFX中提供了一个很实用的功能。我们可以将任意节点截图导出。代码如下:WritableImage image mapCanvas.snapshot(new SnapshotParameters(), null); try { ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", fil…

要么干,要么滚,千万别混

原文来自网络&#xff0c;侵删&#xff01; 公司里混日子的人&#xff0c;最终伤害的是自己&#xff01;你混日子&#xff0c;就是日子混你&#xff0c;你自己是输家。 无论为谁打工&#xff0c;要为自己学东西&#xff0c;客观上为公司创造价值。 收获与投入成正比&#xff0c…

basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载

基础配置&#xff1a;Mac 2017 | Python3python虐我千百遍&#xff0c;我待python如初恋Python需要跳过的安装的坑太太太太多了!!!!!前段时间看《利用python进行数据分析》这本书&#xff0c;到可视化的部分&#xff0c;看着最后的例子地图挺酷炫的&#xff0c;跟着敲代码的过程…

秋招--持续更新

7月份 阿里 电话面试挂 高并发 多线程 8月16日 17:06 网易互娱一面跪 问题 树二叉树 堆排序 各种字符串处理

String与InputStream相互转换

转载自 String与InputStream相互转换1.String to InputStream String str "String与InputStream相互转换";InputStream in_nocode new ByteArrayInputStream(str.getBytes()); InputStream in_withcode new ByteArrayInputStream(str.getByt…

spring data jpa是什么?

spring data jpa是什么&#xff1f; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/jewelry008/article/details/76359516 Spring Data JPA能干什么 在开始之前&#xff0c;先举个简单的例子. 一张表user有三个字段&…

LINQ:进阶 - LINQ 标准查询操作概述

“标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法。大多数这些方法都在序列上运行&#xff0c;其中的序列是一个对象&#xff0c;其类型实现了IEnumerable<T> 接口或 IQueryable<T> 接口。标准查询运算符提供了包括筛选、投影、聚合、排序等功能在内的查询…

2020年日历电子版(打印版)_“温故知新”——2020年《故宫日历》(青少版)正式发布...

2020《故宫日历》(青少版)。供图2020《故宫日历》(青少版)。供图中新网北京10月28日电 (记者 冉文娟)由故宫出版社和新东方教育科技集团联合推出的2020年《故宫日历》(青少版)28日在故宫博物院正式发布。《故宫日历》是故宫博物院介绍故宫藏品、传播故宫文化的普及读物。此次故…

BufferedImage与byte[]互转

转载自 BufferedImage与byte[]互转一、需要用到的类java.awt.image.BufferedImage; javax.imageio.ImageIO; java.io.*;二、为什么要将BufferedImage转为byte数组在传输中&#xff0c;图片是不能直接传的&#xff0c;因此需要把图片变为字节数组&#xff0c;然后传输比较方便…

2016经典微小说:《轮回》

内容来源于&#xff1a;网络 多年前&#xff0c;每到清晨&#xff0c;她要送他去幼儿园前。他总是哭着对她恳求&#xff1a;“妈妈&#xff0c;我在家听话&#xff0c;我不惹你生气&#xff0c;求你别送我去幼儿园&#xff0c;我想和你在一起。” 急匆匆忙着要上班的她&#xf…

delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点

综合整理自&#xff1a;百度文库等向量自回归介绍&#xff1a;当我们对变量是否真是外生变量的情况不自信时&#xff0c;传递函数分析的自然扩展就是均等地对待每一个变量。在双变量情况下&#xff0c;我们可以令{yt}的时间路径受序列{zt}的当期或过去的实际值的影响&#xff0…

关于TCP/IP必须知道的几个基础问题

转载自 关于TCP/IP必须知道的几个基础问题描述一下TCP三次握手的过程 接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。第一次握手 client(客户端)发送一个SYN(seqx)包给server(服务器)&#xff0c;然后“期待”server的ACK回复。p.s: seq为sequ…

升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java?

在上一篇文章中&#xff0c;简要介绍了升讯威微信营销系统的功能设计和架构设计&#xff0c;限于篇幅只能抛砖引玉&#xff0c;从本章节开始将围绕功能的设计和架构的设计进行详细的论述。 中控服务器的设计 在上文中&#xff0c;我们谈到需要一个中控服务器&#xff0c;用来维…

Java 虚拟机部分面试题

https://www.imooc.com/article/31018?block_idtuijian_wz https://www.imooc.com/article/31018?block_idtuijian_wz https://github.com/Snailclimb/Java_Guide https://github.com/Snailclimb/Java_Guide

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前&#xff0c;先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件&#xff0c;换句话说&#xff0c;cpio 命令可以从归档包中提取文件(或目录)&#xff0c;也可以将文件(或目录)复制到归档包中。归档包&#xff0c;也可称为文…

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中&#xff0c;我们详细分析了微信订阅号和服务号的区别&#xff0c;在本篇中&#xff0c;将进入正题&#xff1a;升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1&#xff09;设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能&#xff0c;包括微官网、…