.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-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 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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis集群~StackExchang
- 下一篇: .NET 程序集单元测试工具 Smoke