MyCat-10のcentos7でのmycatグローバルシーケンスの使用

1.目標

グローバルシーケンスとは何ですか?mycatのシャーディングテーブルとシャーディングテーブルについて学びました。たとえば、テーブルが2つ以上の部分に分割され、異なる物理サーバーに配置されます。テーブルのブロックが解除されると、テーブルには主キーがあり、この主キーは自動的に拡張されます。 。、そして主キーは一意です。テーブルに2つの同一の主キーがある場合はどうなりますか?それは混乱ではありませんか?ねえ、この時、グローバルシーケンスが出てきて、彼はこの問題を解決することができます。

グローバルシーケンスは、主キーの重複の問題を解決する方法の1つであり、プログラムを使用して自分で一意のIDを生成したり、タイムスタンプを使用して一意のIDを生成したりすることもできますが、グローバルシーケンスのみのようです。グローバルシーケンスはmysqlにある必要があるため、より大きな利点があります。シーケンスリストを作成して、アプリケーションから切り離すことができるようにします。

2.はじめに

グローバルシーケンスは、特定のノードサーバー(mycat物理ライブラリ)のmysqlデータベースに構築する必要があります。今回は、node1のxkahnデータベースにグローバルシーケンステーブルを構築する予定です。(長蛇の列:このシリーズのmycatの投稿で使用されているIPはすべて31と32です。特別な理由により、上位3つのIPを変更することが多いので、気にする必要はありません)

以前のアーキテクチャでは
、ホスト名IPロール
mycat31 192.168.73.31 java1.8以降、mycat1.6.7.5、mysql5.7 mycatサーバー、node1
mycat32 192.168.73.32 mysql5.7node2に必要なソフトウェアを取り出しています。
 

3. mycatグローバルシーケンスを確立します(mycat31で以下を実行する必要があります)

1. node1サーバーmycat31でmysqlにログインし、mycatテストで使用される物理データベースxkahnを使用します

mysql -uroot -p123123
use xkahn;

2. dn1(mysqlのmycat31)にグローバルシーケンステーブルを作成します

create table MYCAT_SEQUENCE(NAME VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 100,PRIMARY KEY(NAME)) ENGINE=INNODB;

 

3. dn1(mycat31のmysql)でグローバルシーケンスに必要な関数を作成します(よくわからない場合は、内容を変更しないでください)

DELIMITER $$
CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS VARCHAR(64) DETERMINISTIC
BEGIN
DECLARE retval VARCHAR(64);
SET retval="-999999999,null";
SELECT CONCAT(CAST(current_value AS CHAR),",",CAST(increment AS CHAR)) INTO retval FROM MYCAT_SEQUENCE WHERE NAME = seq_name;
RETURN retval;
END $$
DELIMITER ;

 

4. dn1(mycat31のmysql)でグローバルシーケンスに必要な関数を引き続き作成します(よくわからない場合は、内容を変更しないでください)

DELIMITER $$
CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),VALUE INTEGER) RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE SET current_value = VALUE WHERE NAME = seq_name;
RETURN mycat_seq_currval(seq_name);
END $$
DELIMITER ;

 

5. dn1(mycat31のmysql)でグローバルシーケンスに必要な関数を引き続き作成します(よくわからない場合は、内容を変更しないでください)

DELIMITER $$
CREATE FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE NAME = seq_name;
RETURN mycat_seq_currval(seq_name);
END $$
DELIMITER ;

 

6.初期化データをdn1(mycat31のmysql)に挿入します

INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ('student',400000,100);

 注:ここの学生はあなた自身の状況に応じて変えることができます、それは単なる代名詞のように感じます。ただし、この値は非常に便利です。書くときは覚えておいてください。7番目の項目を大文字にする必要があることを除いて、生徒は以下の生徒と一致している必要があります。

注:シリアル番号は400000から始まり、グローバルシーケンスライブラリから100個の番号が呼び出されるたびに、100個の番号が使い果たされます。その後、mycatが再起動すると、以前に呼び出された100が使い果たされなくても、次回は再び使用されませんが、次の100のシリアル番号が再度開かれます。

7.構成ファイルvim / usr / local / mycat / conf / sequence_db_conf.propertiesを変更します。

echo "STUDENT=dn1" >> /usr/local/mycat/conf/sequence_db_conf.properties

注:STUDENT = dn1、この値dn1はschema.xmlに存在する必要があります。学生は大文字にする必要があります。また、第6条の学生が小文字であることを除いて、第6条の小文字の学生と一致している必要があります。

8.構成ファイルを変更します:vim /usr/local/mycat/conf/server.xml

<property name = "sequenceHandlerType"> 1 </ property>の値を1に変更します。
注:0はローカルモード、1はデータベースモード、2はタイムスタンプモードです。

4、テスト

1.mycat31でmycatプログラムを開始します 

cd /usr/local/mycat/bin
./mycat console

2-1。新しいmycat31ターミナルを開いて、mycatのデータ管理プラットフォームにログインします。

mysql -umycat -p123456 -h 10.100.100.31 -P 8066
use TESTDB;

2-2。長蛇の列:学生テーブル構造を確認します(mycat31のmysqlモードでxkahnデータの学生テーブル構造を確認します)
DESc学生;

select * from student;

2-3。mycatのデータ管理プラットフォームに戻り、学生テーブルにデータを挿入します

insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'ledi');
insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'kufei');
insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'fanbingbing');
insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'jiajingwen');
insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'liqin');
insert into student(xid,name) values (next value for MYCATSEQ_STUDENT,'dilireba');

ここでは、主キーIDの番号が400,100から開始するように変更されていることがわかります。400,000から開始する必要があるようです。最初のテストが失敗したため、100が使用された可能性があります。次に、mycatを再起動したので、さらに100個のシリアル番号が呼び出されました。つまり、400の初めに表示されるのは400100です。

このグローバルシーケンスに対して別の面倒なテストを行いました。実験が完了したので、(グローバルシーケンスのid値を使用して)他のテーブルにいくつかのデータを挿入し、それを使用できることを確認してから、学生データベースにデータを挿入すると、他の場所で自然に使用されているシーケンス番号はなくなりますが、それでも増加します(他のテーブルで使用されているシーケンス値が欠落しています)

-----------------終了------------------- 2020年3月28日21:20:07 --- -----------------------------------------

古い鉄のダブルクリック666 

おすすめ

転載: blog.csdn.net/xoofly/article/details/105167992