MyCatクロスライブラリクエリスキーム
32085 ワード
Mycatライブラリ間クエリーのソリューション
1.グローバル・テーブルの使用
1.1グローバル・テーブルを使用するビジネスの特徴:データ変動が頻繁ではない データ全体の変化は大きくない データ規模は大きくなく、数十万件を超える記録は少ない 1.2グローバルテーブルの特性:グローバルテーブルの挿入、更新操作はリアルタイムですべてのノードで実行され、各スライスノードデータの一貫性を保つ グローバルテーブルのクエリー操作は、1つのノードからのみ取得 グローバルテーブルはいずれのテーブルともJOIN操作を行うことができる 注意:データの更新はmycatに接続することで行うべきです.そうしないと、各ノード間のデータが一致しません.
1.3 schema.xml構成
1.4 dn 1とdn 2の両方でtenantテーブルのDDL文を実行する
1.5ライブラリ間クエリーsqlテスト
2.ER Joinの使用
2.1 ER Joinを使用したビジネスシーン
MyCATはNewSQL分野の新秀Foundation DBの設計構想を参考にして、Foundation DBは革新的にTable Groupの概念を提出して、それはサブテーブルの記憶位置をメインテーブルに依存して、しかも物理的に隣接して保存するので、JIONの効率と性能の問題を徹底的に解決して、この構想に基づいて、E-R関係に基づくデータのスライス戦略を提出しました.サブテーブルのレコードは、関連する親テーブルのレコードと同じデータスライスに格納されます.
2.2 ER JOinの特徴
2つのテーブルの間には親子テーブル関係があり、プライマリテーブルデータとワードテーブルデータはいずれも1つのノードにあります.
2.3 schema.xml構成
2.4ライブラリ間クエリーsqlテスト
3.Share Joinの使用
3.1 Shar Joinを使用したビジネスシーン
ジョインを必要とするテーブルのデータ量が多い
グローバル・テーブルを使用すると、各ノードのデータが一致することは保証されません.
3.2 schema.xml構成
3.3ライブラリ間クエリーsqlテスト
このスキームの特徴は,sqlにmycatの注釈を加える必要があることであるが,グローバルテーブルを用いることでデータ量が大きすぎたり,各ノードのデータが一致しなかったりすることを避けることができる.
1.グローバル・テーブルの使用
1.1グローバル・テーブルを使用するビジネスの特徴:
1.3 schema.xml構成
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="Test" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<table name="tenant" primaryKey="tenant_id" autoIncrement="true" dataNode="dn1,dn2" type="global" />
schema>
<dataNode name="dn1" dataHost="host1" database="interface"/>
<dataNode name="dn2" dataHost="host2" database="platform" />
<dataNode name="hzero_mdm" dataHost="host2" database="hzero_mdm" />
<dataHost balance="3" maxCon="1000" minCon="10" name="host1" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="192.168.56.127" url="192.168.56.127:3306" password="123456" user="root"/>
dataHost>
<dataHost balance="3" maxCon="1000" minCon="10" name="host2" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="192.168.56.127" url="192.168.56.127:3306" password="123456" user="root"/>
dataHost>
mycat:schema>
1.4 dn 1とdn 2の両方でtenantテーブルのDDL文を実行する
CREATE TABLE `tenant` (
`tenant_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ' ID, , ',
`tenant_num` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT ' '
) ENGINE=InnoDB AUTO_INCREMENT=180146 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT=' ';
1.5ライブラリ間クエリーsqlテスト
SELECT
sms.monitor_system_id,
sms.tenant_id,
hpht.tenant_name,
sms.external_system_code,
sms.enabled_flag,
sms.object_version_number
FROM
monitor_system sms
LEFT JOIN
tenant hpht
ON
sms.tenant_id = hpht.tenant_id
2.ER Joinの使用
2.1 ER Joinを使用したビジネスシーン
MyCATはNewSQL分野の新秀Foundation DBの設計構想を参考にして、Foundation DBは革新的にTable Groupの概念を提出して、それはサブテーブルの記憶位置をメインテーブルに依存して、しかも物理的に隣接して保存するので、JIONの効率と性能の問題を徹底的に解決して、この構想に基づいて、E-R関係に基づくデータのスライス戦略を提出しました.サブテーブルのレコードは、関連する親テーブルのレコードと同じデータスライスに格納されます.
2.2 ER JOinの特徴
2つのテーブルの間には親子テーブル関係があり、プライマリテーブルデータとワードテーブルデータはいずれも1つのノードにあります.
2.3 schema.xml構成
<table name="customer" dataNode="dn1,dn2" rule="sharding-by-intfile">
<childTable name="orders" joinKey="customer_id" parentKey="id"/>
2.4ライブラリ間クエリーsqlテスト
select c.*,o.* from customer join orders on c.id = o.customer_id
3.Share Joinの使用
3.1 Shar Joinを使用したビジネスシーン
ジョインを必要とするテーブルのデータ量が多い
グローバル・テーブルを使用すると、各ノードのデータが一致することは保証されません.
3.2 schema.xml構成
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="Test" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
<table name="tenant" primaryKey="tenant_id" autoIncrement="true" dataNode="dn2" />
schema>
<dataNode name="dn1" dataHost="host1" database="interface"/>
<dataNode name="dn2" dataHost="host2" database="platform" />
<dataNode name="hzero_mdm" dataHost="host2" database="hzero_mdm" />
<dataHost balance="3" maxCon="1000" minCon="10" name="host1" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="192.168.56.127" url="192.168.56.127:3306" password="123456" user="root"/>
dataHost>
<dataHost balance="3" maxCon="1000" minCon="10" name="host2" writeType="0" switchType="1" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="192.168.56.127" url="192.168.56.127:3306" password="123456" user="root"/>
dataHost>
mycat:schema>
3.3ライブラリ間クエリーsqlテスト
/*!mycat:catlet=io.mycat.catlets.ShareJoin */
SELECT
sms.monitor_system_id,
sms.tenant_id,
hpht.tenant_name,
sms.external_system_code,
sms.enabled_flag,
sms.object_version_number
FROM
monitor_system sms
LEFT JOIN
tenant hpht
ON
sms.tenant_id = hpht.tenant_id
このスキームの特徴は,sqlにmycatの注釈を加える必要があることであるが,グローバルテーブルを用いることでデータ量が大きすぎたり,各ノードのデータが一致しなかったりすることを避けることができる.