本文來自社區(qū)用戶投稿,感謝這位小伙伴的技術(shù)分享
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比東寶網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式東寶網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋東寶地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
巨杉數(shù)據(jù)庫架構(gòu)簡介
巨杉數(shù)據(jù)庫作為分布式數(shù)據(jù)庫是計(jì)算和存儲(chǔ)分離架構(gòu),由數(shù)據(jù)庫實(shí)例層和存儲(chǔ)引擎層組成的。存儲(chǔ)引擎層負(fù)責(zé)數(shù)據(jù)庫核心功能比如數(shù)據(jù)讀寫存儲(chǔ)以及分布式事務(wù)管理。數(shù)據(jù)庫實(shí)例層也就是這里的的SQL層負(fù)責(zé)把應(yīng)用SQL請(qǐng)求處理后發(fā)存儲(chǔ)引擎層處理,并且把存儲(chǔ)引擎層響應(yīng)結(jié)果反饋給應(yīng)用層。支持結(jié)構(gòu)化實(shí)例比如MySQL實(shí)例/PG實(shí)例/spark實(shí)例,也支持非結(jié)構(gòu)化實(shí)例比如 Json實(shí)例/S3對(duì)象存儲(chǔ)實(shí)例/PosixFs實(shí)例等等。這種架構(gòu)支持的實(shí)例類型比較多,方便從傳統(tǒng)數(shù)據(jù)庫無縫遷移到巨杉數(shù)據(jù)庫,減小了開發(fā)學(xué)習(xí)成本,之前也跟數(shù)據(jù)庫圈同行交流,他們對(duì)架構(gòu)也是十分認(rèn)可。
這里的SQL層采用的是MySQL實(shí)例,存儲(chǔ)引擎層是有三個(gè)數(shù)據(jù)節(jié)點(diǎn)和協(xié)調(diào)節(jié)點(diǎn)編目節(jié)點(diǎn)組成。其中數(shù)據(jù)節(jié)點(diǎn)就是用來存儲(chǔ)數(shù)據(jù)的,協(xié)調(diào)節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),是用來把MySQL的請(qǐng)求進(jìn)行路由分發(fā)到數(shù)據(jù)庫節(jié)點(diǎn)。編目節(jié)點(diǎn)用來存儲(chǔ)集群的系統(tǒng)信息比如用戶信息/分區(qū)信息等等。這里用一個(gè)容器來模擬一個(gè)物理機(jī)或云虛擬機(jī),這里設(shè)置的是MySQL實(shí)例在一個(gè)容器里,編目和節(jié)點(diǎn)和協(xié)調(diào)節(jié)點(diǎn)放在了一個(gè)容器,三個(gè)數(shù)據(jù)節(jié)點(diǎn)分別放在一個(gè)容器,三個(gè)數(shù)據(jù)節(jié)點(diǎn)構(gòu)成了三個(gè)數(shù)據(jù)組,每個(gè)數(shù)據(jù)組三個(gè)副本。Web應(yīng)用的海量數(shù)據(jù)是通過分片切分的方式分散給不同的數(shù)據(jù)節(jié)點(diǎn),像這里的數(shù)據(jù)ABC通過分片打散到三臺(tái)機(jī)器。
這里的數(shù)據(jù)分片是通過分布式Hash算法DHT機(jī)制實(shí)現(xiàn),DHT是distribute Hashing table 縮寫。當(dāng)寫入數(shù)據(jù)時(shí),首先通過MySQL實(shí)例把記錄下發(fā)到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)會(huì)通過分布式Hash算法根據(jù)每條記錄的分區(qū)鍵進(jìn)行散列,散列完之后協(xié)調(diào)節(jié)點(diǎn)根據(jù)分區(qū)鍵判斷到底發(fā)送到哪一個(gè)分區(qū),所以每個(gè)分區(qū)之間的數(shù)據(jù)是完全隔離互相獨(dú)立的。采用這種方法,我們就可以把一個(gè)很大的表拆散到下面不同的子分區(qū)里面小表,實(shí)現(xiàn)數(shù)據(jù)拆分。
mysqldump和 mydumper/myloader
導(dǎo)入導(dǎo)出工具實(shí)戰(zhàn)
SequoiaDB實(shí)現(xiàn)了對(duì)MySQL的完整兼容,那么有的用戶會(huì)問了:
“既然是完整兼容,MySQL相關(guān)的工具是否能使用?”
“數(shù)據(jù)從MySQL遷移到SequoiaDB如何操作?”
下面我們就介紹SequoiaDB如何使用 mysqldump和 mydumper/myloader 進(jìn)行數(shù)據(jù)的導(dǎo)入導(dǎo)出。
1)通過存儲(chǔ)過程制造測(cè)試數(shù)據(jù)
#mysql -h 127.0.0.1 -P 3306 -u root
mysql>create database news;
mysql>use news;
mysql>create table user_info(id int(11),unickname varchar(100));
delimiter //
create procedure `news`.`user_info_PROC`()
begin
declare iloop smallint default 0;
declare iNum mediumint default 0;
declare uid int default 0;
declare unickname varchar(100) default 'test';
while iNum <=10 do
start transaction;
while iloop<=10 do
set uid=uid+1;
set unickname=CONCAT('test',uid);
insert into `news`.`user_info`(id,unickname)
values(uid,unickname);
set iloop=iloop+1;
end while;
set iloop=0;
set iNum=iNum+1;
commit;
end while;
end//
delimiter ;
call news.user_info_PROC();
2)查看制造測(cè)試數(shù)據(jù)狀況
mysql> use news;
Database changed
mysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 row in set (0.00 sec)
mysql> select count(*) from user_info;
+----------+
| count(*) |
+----------+
| 121 |
+----------+
1 row in set (0.01 sec)
3)執(zhí)行下面mysqldump備份指令
#/opt/sequoiasql/mysql/bin/mysqldump -h 127.0.0.1 -P 3306 -u
root -B news > news.sql
查看到對(duì)應(yīng)的文件為news.sql
然后登陸到數(shù)據(jù)庫刪除原來的數(shù)據(jù)庫數(shù)據(jù)
mysql> drop database news;
Query OK, 1 row affected (0.10 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
4)用source導(dǎo)入新的數(shù)據(jù)
#/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
使用mysqldump導(dǎo)出的完整sql語句,直接登陸數(shù)據(jù)庫執(zhí)行導(dǎo)入即可:
#/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
mysql>source news.sql
mysql> use news;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with-A
Database changed
mysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 row in set (0.00 sec)
可以看到返回結(jié)果,的確支持mysqldump數(shù)據(jù)導(dǎo)出工具和source導(dǎo)入工具。
這一章節(jié)將介紹有關(guān)mydumper和myloader工具的使用。
有的同學(xué)對(duì)于mysqldump與mydumper有點(diǎn)混淆:mysqldump是MySQL原廠自帶的。mydumper/myloader是由MySQL /Facebook等公司開發(fā)維護(hù)的一套邏輯備份恢復(fù)工具,DBA較常使用,需要單獨(dú)安裝,具體安裝方式可以在網(wǎng)絡(luò)上進(jìn)行查詢。
針對(duì)SequoiaDB使用mydumper/myloader的情況,
我們首先查看mydumper版本號(hào)
# mydumper --version
mydumper 0.9.1, built against MySQL 5.7.17
1)mydumper導(dǎo)出數(shù)據(jù)
# mydumper -h 127.0.0.1 -P 3306 -u root -B news -o /home/sequoiadb
刪除原來的數(shù)據(jù)庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| news |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> drop database news;
Query OK, 1 row affected (0.13 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2)myloader 導(dǎo)入數(shù)據(jù)
可以看到數(shù)據(jù)已經(jīng)被刪除,利用myloader導(dǎo)入數(shù)據(jù)
#myloader -h 127.0.0.1 -P 3306 -u root -B news -d /home/sequoiadb
登陸到數(shù)據(jù)庫中查看
# /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| news |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use news;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_news |
+----------------+
| user_info |
+----------------+
1 row in set (0.00 sec)
mysql> select count(*) from user_info;
+----------+
| count(*) |
+----------+
| 121 |
+----------+
1 row in set (0.00 sec)
mydumper 及 myloader 導(dǎo)入數(shù)據(jù)沒問題,看來巨杉數(shù)據(jù)庫 Sequoiadb 的確支持 MySQL 的兼容工具 mydumper 及 myloader。
遷移 MySQL 數(shù)據(jù)庫數(shù)據(jù)只需要把 MySQL 數(shù)據(jù)利用 mydumper 導(dǎo)出之后,在巨杉數(shù)據(jù)庫利用 myloader 導(dǎo)入到巨杉數(shù)據(jù)庫即可。
總結(jié)
巨杉數(shù)據(jù)庫采用計(jì)算-存儲(chǔ)分離的架構(gòu),實(shí)現(xiàn)了MySQL的100%完整兼容。通過本文,我們也可以看到,巨杉數(shù)據(jù)庫可以支持所有標(biāo)準(zhǔn)MySQL的周邊工具,同時(shí)分布式可擴(kuò)展性將大大提升已有應(yīng)用的擴(kuò)展性以及整體數(shù)據(jù)管理能力。因此,巨杉數(shù)據(jù)庫SequoiaDB可以說是傳統(tǒng)單點(diǎn)MySQL方案的一種有力替換。