.NET开发者如何使用MyCat
背景
在開發(fā)中,我們設(shè)計(jì)的系統(tǒng)的效率在很大程度上會(huì)受到數(shù)據(jù)庫引擎單表的性能制約,因此在數(shù)據(jù)量龐大、或記錄過寬時(shí),需要考慮分庫分表從而減輕數(shù)據(jù)庫壓力,提升查詢效率。此外配置讀寫分離,讓主數(shù)據(jù)庫處理事務(wù)性查詢,而從數(shù)據(jù)庫處理SELECT查詢。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性查詢導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。使用讀寫分離最大的作用無非是環(huán)境服務(wù)器壓力。
什么是MyCat?
從定義和分類來看,它是一個(gè)開源的分布式數(shù)據(jù)庫系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分表分庫,即將一個(gè)大表水平分割為N個(gè)小表,存儲(chǔ)在后端MySQL服務(wù)器里或者其他數(shù)據(jù)庫里。
MyCat發(fā)展到目前的版本,已經(jīng)不是一個(gè)單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數(shù)據(jù)庫,也支持MongoDB這種新型NoSQL方式的存儲(chǔ),未來還會(huì)支持更多類型的存儲(chǔ)。而在最終用戶看來,無論是那種存儲(chǔ)方式,在MyCat里,都是一個(gè)傳統(tǒng)的數(shù)據(jù)庫表,支持標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的操作,這樣一來,對前端業(yè)務(wù)系統(tǒng)來說,可以大幅降低開發(fā)難度,提升開發(fā)速度。
MyCat的優(yōu)勢
基于阿里巴巴的開源項(xiàng)目Cobar,具備良好的穩(wěn)定性、可靠性、優(yōu)良的結(jié)構(gòu)和優(yōu)良的性能,擁有許多的項(xiàng)目案例。站在巨人的肩膀上,MyCAT將走的更遠(yuǎn)。
廣泛借鑒最好的開源項(xiàng)目和創(chuàng)新的理念,讓這些融入MyCAT的基因,使MyCAT成為領(lǐng)先其他電商等類似的開源項(xiàng)目,甚至超過了一些企業(yè)級應(yīng)用。
MyCAT技術(shù)團(tuán)隊(duì)的參與者都經(jīng)歷過至少五多年的項(xiàng)目經(jīng)驗(yàn),團(tuán)隊(duì)中包括一些高級軟件工程師、架構(gòu)師、DBA。由精英們組成的MYCAT技術(shù)團(tuán)隊(duì)將確保產(chǎn)品質(zhì)量。
MyCAT是完全獨(dú)立的社區(qū),不依附于任何企業(yè),遵循著完全開放、免費(fèi)、開源的原則。它不像一些開源項(xiàng)目,重要的功能封閉在其商業(yè)產(chǎn)品,并使開源項(xiàng)目像一個(gè)裝飾。
支持超過60種的數(shù)據(jù)庫作為數(shù)據(jù)節(jié)點(diǎn),如MySQL、SQL Server、Oracle、MongoDB、DB2等
MyCat與ADO.NET
由于MyCAT與MySQL協(xié)議有些許差異,開發(fā)者可能不能夠直接使用Oracle官方提供的Mysql.Data(ADO層)來與MyCAT直接連接,因此我們專門為.NET開發(fā)者設(shè)計(jì)了針對MyCAT優(yōu)化過的ADO層驅(qū)動(dòng),即Pomelo.Data.MyCat,開發(fā)者通過使用MyCatConnection、MyCatCommand類可以實(shí)現(xiàn)對MyCAT的連接與查詢。下面將展示一個(gè)簡短的使用MyCat for ADO.NET來向MyCAT寫入數(shù)據(jù)。
首先將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等內(nèi)容在命名空間?Pomelo.Data.MyCat?中. 按照常規(guī)的ADO.NET開發(fā)流程即可實(shí)現(xiàn)對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的協(xié)議與MySQL有所差異,導(dǎo)致了無論是Java平臺(tái)下的Hibernate還是.NET下的Entity Framework都無法使用MySQL的EF provider來操作MyCAT,這點(diǎn)在Migrations以及Code First上表現(xiàn)的尤為明顯,此外開發(fā)者不僅需要手動(dòng)建庫,還需要配置分片規(guī)則等,操作繁瑣。
因此我們特地開發(fā)了專門為MyCAT量身打造的Entity Framework Core Provider,即Pomelo.EntityFrameworkCore.MyCat。
下面我們將詳細(xì)介紹如何在Ubuntu 14.04 Server中部署MyCAT,以及使用Entity Framework Core來使用Code First模式使用MyCAT,并使用EF的Migration功能來創(chuàng)建數(shù)據(jù)庫以及進(jìn)行遷移工作。
1、在服務(wù)器中安裝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設(shè)置為/usr/local/mycat。
3、進(jìn)入~/proxy目錄,啟動(dòng)MyCat for Entity Framework Core的代理程序:
nohup dotnet Pomelo.EntityFrameworkCore.MyCat.Proxy.dll
4、創(chuàng)建一個(gè).NET Core控制臺(tái)程序,并將Pomelo.EntityFrameworkCore.MyCat添加至project.json中。
5、創(chuàng)建模型,如創(chuàng)建一個(gè)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、創(chuàng)建DbContext類,并重寫DbContext中的OnConfiguring方法,配置數(shù)據(jù)節(jié)點(diǎn)以及MyCAT服務(wù)器信息
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")
// 數(shù)據(jù)節(jié)點(diǎn)連接信息.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方法中的邏輯,向數(shù)據(jù)庫中插入數(shù)據(jù)
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、在控制臺(tái)中執(zhí)行dotnet ef migrations add Init和dotnet ef database update來創(chuàng)建數(shù)據(jù)庫。
9、運(yùn)行控制臺(tái)程序。
10、使用Navicat或其他工具查看各個(gè)節(jié)點(diǎn)數(shù)據(jù)情況
最后附上示例的完整屏幕錄像
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>
相關(guān)文章:
MyCat:開源分布式數(shù)據(jù)庫中間件
原文地址:http://www.1234.sh/post/mycat-getting-started-cn
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的.NET开发者如何使用MyCat的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis集群~StackExchang
- 下一篇: .NET 程序集单元测试工具 Smoke