大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Mycat介紹的詳解

Mycat介紹的詳解

更新時間:2021-06-15 15:29:22 來源:動力節點 瀏覽1206次

1、相關概念

schema:邏輯庫,與MySQL中的Database(數據庫)對應,一個邏輯庫中定義了所包括的Table。

table:表,即物理數據庫中存儲的某一張表,與傳統數據庫不同,這里的表格需要聲明其所存儲的邏輯數據節點DataNode,這是通過表格的分片規則定義來實現的,table可以定義其所屬的“子表(childTable)”,子表的分片依賴于與“父表”的具體分片地址,簡單的說,就是屬于父表里某一條記錄A的子表的所有記錄都與A存儲在同一個分片上。

分片規則:是一個字段與函數的捆綁定義,根據這個字段的取值來返回所在存儲的分片(DataNode)的序號,每個表格可以定義一個分片規則,分片規則可以靈活擴展,默認提供了基于數字的分片規則,字符串的分片規則等。

dataNode:MyCAT的邏輯數據節點,是存放table的具體物理節點,也稱之為分片節點,通過DataSource來關聯到后端某個具體數據庫上,一般來說,為了高可用性,每個DataNode都設置兩個DataSource,一主一從,當主節點宕機,系統自動切換到從節點。

dataHost:定義某個物理庫的訪問地址,用于捆綁到dataNode上。

MyCAT目前通過配置文件的方式來定義邏輯庫和相關配置:

MYCAT_HOME/conf/schema.xml中定義邏輯庫,表、分片節點等內容;

MYCAT_HOME/conf/rule.xml中定義分片規則;

MYCAT_HOME/conf/server.xml中定義用戶以及系統相關變量,如端口等。

關系圖:

Mycat介紹的詳解

2、垂直切分

根據業務的不同,將不同業務的表放到不同的數據庫中。示例:

schema.xml文件:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <!-- schema邏輯數據庫 -->
    <schema name="mycat1" checkSQLschema="false" sqlMaxLimit="100" dataNode="mycat1" />
    <schema name="mycat2" checkSQLschema="false" sqlMaxLimit="100" dataNode="mycat2" />
    <schema name="mycat3" checkSQLschema="false" sqlMaxLimit="100" dataNode="mycat3" />

    <!--使用dataNode將實際數據庫和邏輯數據庫映射-->
    <dataNode name="mycat1" dataHost="mycat" database="mycat1" />
    <dataNode name="mycat2" dataHost="mycat" database="mycat2" />
    <dataNode name="mycat3" dataHost="mycat" database="mycat3" />

    <dataHost name="mycat" maxCon="1000" minCon="10" balance="0"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>select user()</heartbeat>
       <!--寫上數據庫鏈接信息-->
       <writeHost host="hostM1" url="ip1:3306" user="root" password="123456" />
       <writeHost host="hostM2" url="ip2:3306" user="root" password="123456" />
       <writeHost host="hostM3" url="ip3:3306" user="root" password="123456" />
    </dataHost>
</mycat:schema>

server.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
      <property name="defaultSqlParser">druidparser</property>
    </system>
    <!--帳號密碼以及所鏈接的邏輯庫-->
    <user name="test">
        <property name="password">test</property>
        <property name="schemas">mycat1,mycat2,mycat3</property>
    </user>

    <!--只讀的用戶信息-->
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">mycat1,mycat2,mycat3</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

以上配置是將mycat1,mycat2和mycat3數據庫分別放在ip1,ip2和ip3對應的數據庫實例中。

優點:

  • 拆分后業務清晰,拆分規則明確;
  • 系統之間整合或擴展容易;
  • 數據維護簡單。

缺點:

  • 部分業務表無法join,只能通過接口方式解決,提高了系統復雜度;
  • 受每種業務不同的限制存在單庫性能瓶頸,不易數據擴展跟性能提高;
  • 事務處理復雜。

3、水平拆分

對數據量很大的表進行拆分,把這些表按照某種規則將數據存放到不同的數據庫中。示例:

schema.xml文件:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <!-- tb_class和tb_student有外鍵關聯關系,可以測試join -->
    <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
       <table name="tb_user" dataNode="dn1,dn2" rule="rule1" primaryKey="id"/>
    </schema>

    <dataNode name="dn1" dataHost="mycat1" database="mycat1" />
    <dataNode name="dn2" dataHost="mycat2" database="mycat2" />

    <dataHost name="mycat1" maxCon="1000" minCon="10" balance="0"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>select user()</heartbeat>
       <writeHost host="host1" url="ip1:3306" user="root" password="123456" />
    </dataHost>

    <dataHost name="mycat2" maxCon="1000" minCon="10" balance="0"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>select user()</heartbeat>
       <writeHost host="host3" url="ip2:3306" user="root" password="123456" />
    </dataHost>
</mycat:schema>

server.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
      <property name="defaultSqlParser">druidparser</property>
    </system>
    <!--帳號密碼以及所鏈接的邏輯庫-->
    <user name="test">
        <property name="password">test</property>
        <property name="schemas">test</property>
    </user>

    <!--只讀的用戶信息-->
    <user name="user">
        <property name="password">user</property>
        <property name="schemas">test</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

rule.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/"> 
 <tableRule name="rule1">
    <!--安裝id規則,將id除于1024然后取余,如果余數落在0~512就將數據寫到第一個數據庫,如果是在512~1024就放到第二個數據庫-->
    <rule>
      <columns>id</columns>
      <algorithm>func1</algorithm>
    </rule>
 </tableRule>

 <!--分成兩片,每片的區間是512,兩個相乘必須是1024-->
 <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
 </function>
</mycat:rule>

以上配置是把id在0~512的數據放在ip1對應的數據庫mycat1中的tb_user表中,512~1024的數據放在ip2對應的數據庫mycat2中的tb_user表中。

優點:

  • 拆分規則抽象好,join操作基本可以數據庫做;
  • 不存在單庫大數據,高并發的性能瓶頸;
  • 應用端改造較少;
  • 提高了系統的穩定性跟負載能力。

缺點:

  • 拆分規則難以抽象;
  • 分片事務一致性難以解決;
  • 數據多次擴展難度跟維護量極大;
  • 跨庫join性能較差

4、各類數據庫中間件

中間件種類很多種,如下圖:

Mycat介紹的詳解

Cobar:

阿里巴巴B2B開發的關系型分布式系統,管理將近3000個MySQL實例。在阿里經受住了考驗,后面由于作者的走開的原因cobar沒有人維護了,阿里也開發了tddl替代cobar。

MyCAT:

社區愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存在的一些問題,并且加入了許多新的功能在其中。目前MyCAT社區活躍度很高,目前已經有一些公司在使用MyCAT。

OneProxy:

數據庫界大牛,前支付寶數據庫團隊領導樓總開發,基于mysql官方的proxy思想利用c進行開發的,OneProxy是一款商業收費的中間件,專注在性能和穩定性上。

Vitess:

這個中間件是Youtube生產在使用的,但是架構很復雜。與以往中間件不同,使用Vitess應用改動比較大要使用他提供語言的API接口。

Kingshard:

Kingshard是前360Atlas中間件開發團隊的陳菲利用業務時間用go語言開發的,目前在不斷完善。

Atlas:

360團隊基于mysql proxy把lua用C改寫。原有版本是支持分表,目前已經放出了分庫分表版本。

MaxScale與MySQL Route:

MaxScale是mariadb研發的,目前版本不支持分庫分表。MySQL Route是現在MySQL官方Oracle公司發布出來的一個中間件。

以上就是動力節點Java培訓機構的小編針對“Mycat介紹的詳解”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美日韩亚洲国产 | 日日操日日操 | 不卡的毛片| 色综合欧美亚洲另类久久 | 91精品一区二区三区久久久久 | 999视频在线观看 | 色中文字幕在线 | 狠狠色噜噜狠狠米奇777 | 精品成人| 亚洲高清中文字幕 | 4虎最新网站 | 国产精品久久久一区二区三区 | 久久精品中文字幕 | 国产乱码在线精品可播放 | 91久久国产 | 九操网 | 成人免费观看网欧美片 | 综合久久久久久中文字幕 | 呦女亚洲一区精品 | 99色吧| 欧美精品国产一区二区三区 | 国产亚洲精品成人a在线 | 模特精品视频一区 | 欧美日韩中字 | 99久久免费国产精品特黄 | 纯欧美一级毛片_免费 | 国产大尺度福利视频在线 | 在线观看福利影院 | 韩国精品一区 | 久久5| 亚洲国产精品久久久久久 | 99久久国产综合精麻豆 | 午夜香蕉成视频人网站高清版 | 三上悠亚在线一区 | 九九精品久久 | 欧美大片日韩精品四虎影视 | 国产精品久久久久久 | 国产一区在线观看免费 | 手机看片国产免费久久网 | 亚洲和欧美毛片久久久久 | 97影院午夜在线观看琪琪 |