亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Amoeba For MySQL入門:實現數據庫水平切分

系統 1871 0

????? 當系統數據量發展到一定程度后,往往需要進行數據庫的垂直切分和水平切分,以實現負載均衡和性能提升,而數據切分后隨之會帶來多數據源整合等等問題。如果僅僅從應用程序的角度去解決這類問題,無疑會加重應用程度的復雜度,因此需要一個成熟的第三方解決方案。

Amoeba正是解決此類問題的一個開源方案,Amoeba位于應用程序和數據庫服 務器之間,相當于提供了一個代理,使得應用程序只要連接一個Amoeba,相當于只是在操作一個單獨的數據庫服務器,而實際上卻是在操作多個數據庫服務 器,這中間的工作全部交由Amoeba去完成。

本文針對基于MySQL的水平切分的實現機制,講解Amoeba For MySQL的簡單應用。

?

一、背景介紹

使用數據庫:MySQL

數據庫節點1:127.0.0.1

數據庫節點2:10.167.157.176

?

數據庫名:yunzhu

切分的表:用戶表(user_info)

切分的參數:用戶ID(USERID)

?

切分規則:

用戶ID小于等于100的數據存到數據庫節點1,

用戶ID大于100的數據存到數據庫節點2

?

user_info表結構如下:

Sql代碼??
  1. CREATE ? TABLE ?`user_info`?(??
  2. ????`USERID`? INT (10)? NOT ? NULL ? DEFAULT ? '0' ,??
  3. ????`USERNAME`? VARCHAR (50)? NULL ? DEFAULT ? NULL ,??
  4. ???? PRIMARY ? KEY ?(`USERID`)??
  5. )??

數據庫節點1中user_info表中的數據:

+--------+-----------+ | USERID | USERNAME? | +--------+-----------+ |???? 73 | Chen Feng | |???? 88 | China???? | +--------+-----------+

數據庫節點1中user_info表中的數據:

+--------+----------+ | USERID | USERNAME | +--------+----------+ |??? 108 | Jiang Su | |??? 200 | NanJing? | +--------+----------+

?

Amoeba版本:

amoeba-mysql-binary-2.2.0

?

下載地址:

http://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz

下載后直接解壓即可使用

?

二、配置Amoeba

配置文件全部位于conf目錄下

1、amoeba.xml

配置連接Amoeba程序的用戶名和密碼:

Xml代碼??
  1. < property ? name = "user" > root </ property > ??
  2. < property ? name = "password" > chenfeng123 </ property > ??

2、dbServers.xml

先配置一個抽象的父節點,定義多個數據庫節點的共通的信息,包括數據庫節點的端口、schema、用戶名和密碼:

Xml代碼??
  1. < dbServer ? name = "abstractServer" ? abstractive = "true" > ??
  2. ???? < factoryConfig ? class = "com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory" > ??
  3. ????????......??
  4. ??????????????
  5. ???????? <!--?mysql?port?--> ??
  6. ???????? < property ? name = "port" > 3306 </ property > ??
  7. ??????????
  8. ???????? <!--?mysql?schema?--> ??
  9. ???????? < property ? name = "schema" > yunzhu </ property > ??
  10. ??????????
  11. ???????? <!--?mysql?user?--> ??
  12. ???????? < property ? name = "user" > root </ property > ??
  13. ??????????
  14. ???????? <!--??mysql?password?--> ??
  15. ???????? < property ? name = "password" > chenfeng </ property > ??
  16. ???? </ factoryConfig > ??
  17. ??????......??
  18. </ dbServer > ??

? 再配置兩個數據庫節點,繼承上面的父節點,然后配置各自的IP地址即可:

Xml代碼??
  1. < dbServer ? name = "server1" ?? parent = "abstractServer" > ??
  2. ???? < factoryConfig > ??
  3. ???????? <!--?mysql?ip?--> ??
  4. ???????? < property ? name = "ipAddress" > 127.0.0.1 </ property > ??
  5. ???? </ factoryConfig > ??
  6. </ dbServer > ??
  7. ??
  8. < dbServer ? name = "server2" ?? parent = "abstractServer" > ??
  9. ???? < factoryConfig > ??
  10. ???????? <!--?mysql?ip?--> ??
  11. ???????? < property ? name = "ipAddress" > 10.167.157.176 </ property > ??
  12. ???? </ factoryConfig > ??
  13. </ dbServer > ??

3、rule.xml

? 配置切分規則:

???? 1、schema指定數據庫名,name指定表名,defaultPools指定關聯的數據庫節點(指定哪幾個節點就從哪幾個節點里面查數據)

???? 2、切分規則:

???????? 1)用戶ID小于100的數據存到數據庫節點1

???????? 2)用戶ID大于100的數據存到數據庫節點2

Xml代碼??
  1. < amoeba:rule ? xmlns:amoeba = "http://amoeba.meidusa.com/" > ??
  2. ???? < tableRule ? name = "user_info" ? schema = "yunzhu" ? defaultPools = "server1,server2" > ??
  3. ???????? < rule ? name = "rule1" > ??
  4. ???????????? < parameters > USERID </ parameters > ??
  5. ???????????? < expression > <![CDATA[?USERID?<=?100]]> </ expression > ??
  6. ???????????? < defaultPools > server1 </ defaultPools > ??
  7. ???????????? < readPools > server1 </ readPools > ??
  8. ???????????? < writePools > server1 </ writePools > ??
  9. ???????? </ rule > ??
  10. ???????? < rule ? name = "rule2" > ??
  11. ???????????? < parameters > USERID </ parameters > ??
  12. ???????????? < expression > <![CDATA[?USERID?>?100?]]> </ expression > ??
  13. ???????????? < defaultPools > server2 </ defaultPools > ??
  14. ???????????? < writePools > server2 </ writePools > ??
  15. ???????????? < readPools > server2 </ readPools > ??
  16. ???????? </ rule > ??
  17. ???? </ tableRule > ????????
  18. </ amoeba:rule > ??

?

三、運行及驗證

1、啟動Amoeba

通過bin目錄下的amoeba.bat啟動:

?

Dos代碼??
  1. amoeba?start??

?

啟動后控制臺打印如下信息,可以看到:

Dos代碼??
  1. log4j:WARN?log4j?config?load?completed?from?file:D:\JavaTools\amoeba-mysql-binar??
  2. y- 2.2 . 0 \bin\..\conf\log4j.xml??
  3. 2013 - 01 - 08 ? 09 : 32 : 27 , 765 ?INFO??context.MysqlRuntimeContext?-?Amoeba?for?Mysql?cur??
  4. rent?versoin= 5.1 . 45 -mysql-amoeba-proxy- 2.2 . 0 ??
  5. log4j:WARN?ip?access?config?load?completed?from?file:D:\JavaTools\amoeba-mysql-b??
  6. inary- 2.2 . 0 \bin\../conf/access_list.conf??
  7. 2013 - 01 - 08 ? 09 : 32 : 27 , 921 ?INFO??net.ServerableConnectionManager?-?Amoeba?for?Mysql??
  8. ?listening?on? 0.0 . 0.0 / 0.0 . 0.0 : 8066 .??
  9. 2013 - 01 - 08 ? 09 : 32 : 27 , 921 ?INFO??net.ServerableConnectionManager?-?Amoeba?Monitor?S??
  10. erver?listening?on?/ 127.0 . 0.1 : 40170 .??

2、連接Amoeba

通過mysql客戶端連接Amoeba,端口指定為8066,然后還像以前操作MySQL一樣進行操作:

Dos代碼??
  1. D:\>mysql?-P8066?-uroot?-pchenfeng123??
  2. Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.??
  3. Your?MySQL?connection?id?is? 21616774 ?to?server?version:? 5.1 . 45 -mysql-amoeba-prox??
  4. y- 2.2 . 0 ??
  5. ??
  6. Type? 'help;' ?or? '\h' ?for?help.?Type? '\c' ?to?clear?the?buffer.??
  7. ??
  8. mysql>??

3、驗證數據的查詢

查詢yunzhu庫下的user_info表的數據,如下:

Sql代碼?
  1. mysql>? select ?*? from ?yunzhu.user_info;??
  2. + --------+-----------+ ??
  3. |?USERID?|?USERNAME??|??
  4. + --------+-----------+ ??
  5. |????108?|?Jiang?Su??|??
  6. |????200?|?NanJing???|??
  7. |?????73?|?Chen?Feng?|??
  8. |?????88?|?China?????|??
  9. + --------+-----------+ ??
  10. 4? rows ? in ? set ?(0.02?sec)??

可以看到,現在查到了兩個數據庫節點中的user_info表中的所有記錄。

?

4、驗證數據的插入

這里插入兩條數據,一條USERID為55,另一條USERID為155,如下:

Dos代碼??
  1. mysql>?insert?into?yunzhu.user_info(USERID,USERNAME)?values( 55 , 'test55' );??
  2. Query?OK,? 1 ?row?affected?( 0.13 ?sec)??
  3. ??
  4. mysql>?insert?into?yunzhu.user_info(USERID,USERNAME)?values( 155 , 'test155' );??
  5. Query?OK,? 1 ?row?affected?( 0.05 ?sec)??

?

查詢數據庫節點1:

Dos代碼??
  1. D:\>mysql?-uroot?-pchenfeng??
  2. Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.??
  3. Your?MySQL?connection?id?is? 33 ?to?server?version:? 5.0 . 18 -nt??
  4. ??
  5. Type? 'help;' ?or? '\h' ?for?help.?Type? '\c' ?to?clear?the?buffer.??
  6. ??
  7. mysql>?select?*?from?yunzhu.user_info;??
  8. +--------+-----------+??
  9. |?USERID?|?USERNAME??|??
  10. +--------+-----------+??
  11. |????? 55 ?|?test55????|??
  12. |????? 73 ?|?Chen?Feng?|??
  13. |????? 88 ?|?China?????|??
  14. +--------+-----------+??
  15. 3 ?rows?in?set?( 0.00 ?sec)??

?

查詢數據庫節點2:

Dos代碼??
  1. D:\>mysql?-uroot?-pchenfeng?-h10. 167.157 . 176 ??
  2. Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.??
  3. Your?MySQL?connection?id?is? 34 ?to?server?version:? 5.0 . 18 -nt??
  4. ??
  5. Type? 'help;' ?or? '\h' ?for?help.?Type? '\c' ?to?clear?the?buffer.??
  6. ??
  7. mysql>?select?*?from?yunzhu.user_info;??
  8. +--------+----------+??
  9. |?USERID?|?USERNAME?|??
  10. +--------+----------+??
  11. |???? 108 ?|?Jiang?Su?|??
  12. |???? 155 ?|?test155??|??
  13. |???? 200 ?|?NanJing??|??
  14. +--------+----------+??
  15. 3 ?rows?in?set?( 0.00 ?sec)??

可以發現USERID為55的記錄插入到了數據庫節點1中,USERID為155的記錄插入到了數據庫節點2中。

因為根據rule.xml中的切分規則,USERID小于等于100的的記錄存在數據庫節點1中,而大于100的則存在數據庫節點2中。

?

四、注意一些限制

這是我在實踐中發現的,剛開始不知道存在這樣的限制,以致于浪費了很多時間,以為配置有問題,搞了很久才發現原來是因為這些限制才導致沒有出現預期的結果,所以必須要注意:

1、不管是查詢和插入,每條都必須顯式地指定數據庫名(yunzhu),否則只會從一個數據庫節點中查詢數據,或者所有數據全部會插入一個數據庫節點中。

2、插入數據時,必須顯式地指定列名,如“insert into yunzhu.user_info(USERID,USERNAME)”,否則切分規則不會生效,所有記錄都會插入到一個數據庫節點中。

Amoeba For MySQL入門:實現數據庫水平切分


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产小呦 | 精品三级国产一区二区三区四区 | 久久怡红院国产精品 | 欧美一区二区三区免费观看视频 | 清纯唯美亚洲综合日韩第 | 欧美特级特黄a大片免费 | 午夜欧美福利视频 | 99热99色| 久久久久久久蜜桃 | 狠狠涩| 日韩不卡毛片 | 中文字幕日本不卡一二三区 | 狠狠久久久久久亚洲综合网 | 国内精品免费 | 久久免费观看爱情动作片 | 欧美肥婆xxxx欧美另类 | 亚洲色四在线视频观看 | 久草免费新视频 | 免费a级毛片在线播放 | 欧美成 人激情视频 | 最新国产精品自拍 | 亚洲日本在线观看 | 欧美开嫩苞实拍视频在线观看 | 国产欧美精品一区二区 | 男人手机天堂 | 99热久久这里只精品国产 | 亚洲精品久久久久久久无 | 男人天堂a | 最新香蕉97超级碰碰碰碰碰久 | 久草青青 | 亚洲性视频网站 | 天天干天天干天天干 | 欧美精品v国产精品v | 国产美女在线免费观看 | 久久性| 天天天天干| 波多野结衣视频一区 | 久爱午夜精品免费视频 | 妇女毛片 | 四虎影视在线影院在线观看观看 | 日韩精品一区二区三区中文精品 |