2009年12月28日

[MySQL][Spider]Spider-2.11リリース

Spiderストレージエンジンのバージョン 2.11(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・リンクのバックグラウンド死活監視機能を追加しました。
・テーブルパラメータに「monitoring_bg_interval」「monitoring_bg_kind」を追加しました。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年12月15日

[MySQL][Spider]Spider-2.10リリース

Spiderストレージエンジンのバージョン 2.10(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「ssl_ca」「ssl_capath」「ssl_cert」「ssl_cipher」「ssl_key」「ssl_verify_server_cert」「default_file」「default_group」を追加しました。
・UDFパラメータに「ssl_ca」「ssl_capath」「ssl_cert」「ssl_cipher」「ssl_key」「ssl_verify_server_cert」「default_file」「default_group」を追加しました。
 Spiderのリモートサーバへの通信にsslが利用可能になりました。
 Spiderのリモートサーバへの接続時に設定ファイル(my.cnf)を読むことが可能になりました。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。
前山さん、バグレポートありがとうございます。

2009年12月9日

Shibuya.pm #12 スライド

遅くなりましたが、11/30に開催されましたShibuya.pm #12 - NoSQL特集で使用したスライドをSlideShareにアップロードしました。

2009年11月29日

[MySQL][Spider]Spider-2.9リリース

Spiderストレージエンジンのバージョン 2.9(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・UDF「spider_ping_table」を追加しました。
・テーブルパラメータに「monitoring_kind」「monitoring_limit」「monitoring_server_id」を追加しました。
・サーバパラメータに「spider_udf_table_mon_mutex_count」を追加しました。
 このリリースでは、Spiderのリンク障害状況確認機能が追加されています。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。
枦山さん、merikonjattaさん、バグレポートありがとうございます。

2009年11月4日

[MySQL][Spider]Spider-2.8リリース

Spiderストレージエンジンのバージョン 2.8(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「link_status」を追加しました。
 このパラメータにより、alter table文を利用してリンクの障害状況を変更することができます。
 なお、Spiderのリンク障害状況管理は、テーブル単位で行われます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年10月30日

[MySQL][Spider]Spider-2.7リリース

Spiderストレージエンジンのバージョン 2.7(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・1Spiderテーブルに付き、複数リンクを生成し、ロックなし参照時にロードバランスするようになりました。ロードバランスのルールは((サーバID + スレッドID) % リンク数)で決定されます。
 複数リンクを生成するには、「host」「user」「table」「server」「socket」「wrapper」「database」「password」のテーブルパラメータを記述する際に、半角スペース区切りで複数記述してください。
 例:「host 'h1 h2 h3'」

今後、SpiderでActive-Activeのクラスタ構成ができるようにするための、機能追加を行っていく予定です。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年10月19日

[MySQL][Spider]Spider-2.6リリース

Spiderストレージエンジンのバージョン 2.6(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・サーバパラメータに「spider_remote_access_charset」「spider_remote_autocommit」「spider_remote_sql_log_off」「spider_remote_trx_isolation」を追加しました。
 Spiderストレージエンジンは、リモートサーバへの接続時これらの情報を合わせて設定するのですが、これらの情報があらかじめわかっていて設定する必要がない場合があります。そのような場合に、これらのパラメータを設定するとリモートサーバへの接続時にこれらの情報を設定する必要がなくなり、接続処理を高速化することができます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。
Giuseppeさん、バグレポートありがとうございます。

2009年10月14日

[MySQL][VP]Vartical Partitioning-0.6リリース

Vertical Partitioningストレージエンジンのバージョン 0.6(alpha)をリリースしました。
Vertical Partitioningストレージエンジンは、テーブルのVertical Partitioning用のストレージエンジンです。
http://launchpad.net/vpformysql

今回の主な変更は以下です。
・UDF「vp_copy_tables」を追加しました。
 Vertical Partitioningテーブルに新しいテーブルを追加した際に、そのテーブルに対してデータを同期させたりするためのUDFです。

・テーブルパラメータに「choose_ignore_table_list」「choose_ignore_table_list_for_lock」「zero_record_update_mode」を追加しました。
 Vertical Partitioningテーブルに新しいテーブルを追加した際などに、そのテーブルに対して検索を行わないようにするパラメータです。また、ロックを伴う検索と伴わない検索で利用する子テーブルを分ける為に使用することもできます。

・サーバパラメータに「vp_udf_ct_bulk_insert_interval」「vp_udf_ct_bulk_insert_rows」を追加しました。
 vp_copy_tablesの利用中にコピーの負荷を他のコネクションから動的に変更するためのパラメータです。

利用例
-------------------------------------------------------------------------------
初期状態:
    create table tbl_a(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a),
      key idx1(col_c, col_a)
    )engine=VP comment='tnl "tbl_b tbl_c"';

テーブル追加:
    alter table tbl_a comment='tnl "tbl_b tbl_c tbl_d", cit "3", cil "3", zru "1"';

コピー:
    select vp_copy_tables("tbl_a", "tbl_c", "tbl_d");

後処理:
    alter table tbl_a comment='tnl "tbl_b tbl_c tbl_d"';
-------------------------------------------------------------------------------

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年10月5日

[MySQL][Spider][VP]Spider-2.5 Vartical Partitioning-0.5リリース

Spiderストレージエンジンのバージョン 2.5(beta)とVertical Partitioningストレージエンジンのバージョン 0.5(alpha)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/
Vertical Partitioningストレージエンジンは、テーブルのVertical Partitioning用のストレージエンジンです。
http://launchpad.net/vpformysql

今回の主な変更は以下です。
・Vertical Partitioningストレージエンジン単独でのコンパイルが可能になりました。

・VPが多段で重ねられるようになりました。
 例:
    create table a(a int primary key)engine=myisam;
    create table b(a int primary key)engine=vp comment 'tnl "a"';
    create table c(a int primary key)engine=vp comment 'tnl "b"';

・テーブルパラメータに「bgs_mode」「bgi_mode」「bgu_mode」を追加しました。
・サーバパラメータに「vp_bgs_mode」「vp_bgi_mode」「vp_bgu_mode」を追加しました。
 これらのパラメータの追加により、Vertical PartitioningストレージエンジンからSpiderストレージエンジンへのパラレル参照、更新が可能になります。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年9月27日

[MySQL][Spider][VP]Spider-2.4 Vartical Partitioning-0.4リリース

Spiderストレージエンジンのバージョン 2.4(beta)とVertical Partitioningストレージエンジンのバージョン 0.4(alpha)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/
Vertical Partitioningストレージエンジンは、テーブルのVertical Partitioning用のストレージエンジンです。
http://launchpad.net/vpformysql

今回の主な変更は以下です。
・SpiderストレージエンジンとVertical Partitioningストレージエンジンの組み合わせで「engine-condition-pushdown」が利用可能になりました。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。
Gennadyさん、バグレポートありがとうございます。

2009年9月21日

[MySQL][VP]Vertical Partitioningストレージエンジン 0.3リリース

Vertical Partitioningストレージエンジンのバージョン 0.3をリリースしました。
http://launchpad.net/vpformysql

今回の主な変更は以下です。
・テーブルパラメータに「choose_table_mode_for_lock」を追加しました。
・サーバパラメータに「vp_choose_table_mode_for_lock」を追加しました。
 このパラメータは、デッドロック対策としてロックの順番をテーブルリストの並び順に固定するために利用します。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年9月12日

[MySQL][Spider]Spiderストレージエンジン 2.3リリース

Spiderストレージエンジンのバージョン 2.3(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・UDFパラメータに「connection_channel」を追加しました。
 このパラメータを利用すると、1サーバに対して複数接続を確立し、バックグラウンドの並列性を高めることができます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年9月6日

[MySQL][Spider]Spiderストレージエンジン 2.2リリース

Spiderストレージエンジンのバージョン 2.2(beta)をリリースしました。
Spiderストレージエンジンは、database sharding用のストレージエンジンです。
http://spiderformysql.com/

今回の主な変更は以下です。
・UDFパラメータに「iop000」を追加しました。
 このパラメータを利用すると、UDFに指定したテーブルにinsertする際に、「ignore」「replace」ができるようになります。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月29日

[MySQL][Spider]Spiderストレージエンジン 2.1リリース

Spiderストレージエンジンのバージョン 2.1(beta)をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・UDF「spider_direct_sql」「spider_bg_direct_sql」を追加しました。
 これらのUDFは、Spiderのテーブルリンクを利用して、リモートサーバに任意のSQLを発行し、結果セットがある場合はテンポラリテーブルに格納するというものです。
 主な用途としては以下を想定しています。
 1.メンテナンス用(他のサーバにSpiderのリンク先のテーブルを
   作成したりする)
 2.リモートサーバのテーブル以外の資源(ストアドプロシージャ、
   ストアドファンクション)の利用用
 3.大量データの一括更新用(全レコードを1SQLで更新する
   ような場合。複数のリモートサーバで並列更新ができる
   ということと、ローカルサーバとリモートサーバのデータ
   転送量を削減できるというメリットがある)
 4.2ステップ集計処理用(DWHなどで、大量データの集計を行う
   場合に、リモートサーバでまず一次集計を行い、その集計結果を
   各リモートサーバからローカルサーバに集め、さらに集計する。
   一次集計をパラレルで行えるということと、ローカルサーバと
   リモートサーバのデータ転送量を削減できるというメリットが
   ある)

2ステップ集計の例
(7つのリモートサーバに分割されたテーブルのレコード数をカウントする)
-------------------------------------------------------------------------------
準備:
mysql> create table target_hosts (host char(17))engine=myisam;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into target_hosts (host) values ('192.168.22.13'),('192.168.22.14'),('192.168.22.15'),('192.168.22.16'),('192.168.22.51'),('192.168.22.52'),('192.168.22.53');
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0

mysql> create temporary table a (a int)engine=myisam;
Query OK, 0 rows affected (0.00 sec)

実行:
mysql> select sum(a.a) from a, (select sum(spider_direct_sql('select count(*) from data01', 'a', concat('srv "s", host "', host, '"'))) cnt from target_hosts) c;
+-----------+
| sum(a.a) |
+-----------+
| 117641811 |
+-----------+
1 row in set (40.86 sec)

mysql> truncate table a;
Query OK, 0 rows affected (0.00 sec)

mysql> select sum(a.a) from a, (select spider_bg_direct_sql('select count(*) from data01', 'a', concat('srv "s", host "', host, '"')) cnt from target_hosts) c;
+-----------+
| sum(a.a) |
+-----------+
| 117641811 |
+-----------+
1 row in set (5.91 sec)
-------------------------------------------------------------------------------

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月22日

[MySQL][Spider]Spiderストレージエンジン 2.0リリース

Spiderストレージエンジンのバージョン 2.0(beta)をリリースしました。
http://spiderformysql.com/
これ以降は、1.xが安定版、2.xが開発版となります。

今回の主な変更は以下です。
・テーブルパラメータに「semi_table_lock_connection」を追加しました。
・サーバパラメータに「spider_semi_table_lock_connection」を追加しました。
 Spiderストレージエンジンには、ローカルサーバで実行される1SQLの間のリモートサーバでの参照一貫性を担保するため、トランザクション対応のテーブルでは「spider_semi_trx」「spider_semi_trx_isolation」、トランザクション非対応のテーブルでは「spider_semi_table_lock」「semi_table_lock」というオプションが用意されています。しかし「semi_table_lock」はリモートサーバにlock tableを実行しトランザクションを暗黙でコミットしてしまうため、同じリモートサーバにトランザクション対応のテーブルとトランザクション非対応のテーブルが混在する場合は、ローカルサーバからリモートサーバにリンクを作成する際に、トランザクション対応テーブル用のコネクションとトランザクション非対応テーブルのコネクションが別のコネクションを利用するようにする必要があります。
 「semi_table_lock_connection」「spider_semi_table_lock_connection」を利用すると、同じ接続情報を持つテーブルでも「semi_table_lock」を利用するかどうかで利用する接続を分けることができます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月18日

[MySQL][Spider]Spiderストレージエンジン 1.0リリース

Spiderストレージエンジンのバージョン 1.0をリリースしました。
このバージョンからGAとなります。
http://spiderformysql.com/

今回からLinux x86_64用の共有ライブラリをリリースしています。
リリースにあたっては、以下の記事を参考にさせていただきました。
http://d.hatena.ne.jp/kazuhooku/20080831/1220144671
kazuhoさんありがとうございます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月15日

[MySQL][Spider]Spiderストレージエンジン 0.18リリース

Spiderストレージエンジンのバージョン 0.18をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「use_pushdown_udf」を追加しました。
・サーバパラメータに「spider_use_pushdown_udf」を追加しました。
 「use_pushdown_udf」「spider_use_pushdown_udf」は、engine_condition_pushdown利用時、where句で利用したUDFをリモートサーバに発行するSQLの検索条件に加えるかどうかを設定することができます。

今回からテーブルパラメータの空白として、改行が利用できるようになりました。
藤尾さん、ご報告ありがとうございます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月11日

[MySQL]グリー勉強会「MySQLハッキングの手引き」

 グリー勉強会「MySQLハッキングの手引き」に参加してきました。
 グリーさん、松信さん、いちいさんありがとうございました。
 細かい内容は、他の方が既に説明されているのでそちらを見ていただくとして、感想としては、非常に創作意欲を刺激される内容でした。

 Spiderでは、リモートサーバのストアドプロシージャ、ストアドファンクションなどの資源を利用するためのUDFの作成を「作らないといけないなー」レベルでなんとなく予定していたのですが、今回の勉強会の影響で完成が早まるかもしれません。
 プロジェクトも登録してみました。
 http://forge.mysql.com/projects/project.php?id=349

 ご期待下さい。

2009年8月9日

[MySQL][Spider]Spiderストレージエンジン 0.17リリース

Spiderストレージエンジンのバージョン 0.17をリリースしました。
このバージョンからRCとなります。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「use_table_charset」を追加しました。
・サーバパラメータに「spider_use_table_charset」「spider_local_lock_table」を追加しました。
 「use_table_charset」「spider_use_table_charset」は、リモートサーバとの通信をテーブルのキャラクターセットで行うか、UTF8固定にするかを切り替えることができます。基本的にデフォルト(通信をテーブルのキャラクターセットで行う)のままで問題はありませんが、SQLの中のデータの長さよりもカラムやテーブルの文字列のほうが極端に長くなるような場合には、この設定を変更することで性能が向上することがあります。
 「spider_local_lock_table」は、lock tableを行った際に、リモートにlock tablesを発行するかどうかを切り替えるパラメータです。このオプションは、無停止でデータの再分配を行う場合などのケースで変更します。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年8月1日

[MySQL][Spider]Spiderストレージエンジン 0.16リリース

Spiderストレージエンジンのバージョン 0.16をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・サーバパラメータに「spider_same_server_link」「spider_table_init_error_interval」を追加しました。
 「spider_same_server_link」は、同じMySQLにテーブルリンクを作成したい場合に利用します。
 「spider_table_init_error_interval」は、誤ってテーブルリンクをループさせてしまった場合に、コネクションを消費し続ける問題を抑止するために利用します。もし、テーブルリンクがループした際に、コネクションが増加し続ける場合はset globalコマンドを利用してこのパラメータを大きくしてください。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年7月25日

[MySQL][Spider]Spiderストレージエンジン 0.15リリース

Spiderストレージエンジンのバージョン 0.15をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「auto_increment_mode」を追加しました。
・サーバパラメータに「spider_auto_increment_mode」を追加しました。
 Spiderは3モードをサポートします。
 0:リモートサーバにロック付き問い合わせで取得した最新付番を利用して、付番を行う。
 1:Spiderテーブル内のカウントで付番を行う。
 2:リモートサーバで付番を行う。

・サーバパラメータに「spider_ping_interval_at_trx_start」を追加しました。
 リモートサーバへの接続断確認を毎回行わなくなることにより、パフォーマンスが向上しました。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年7月21日

[MySQL][Spider]Spiderストレージエンジン 0.14リリース

Spiderストレージエンジンのバージョン 0.14をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・Spiderストレージエンジン単独でのコンパイルが可能になりました。
 詳細はダウンロードドキュメント中の「03_install_spider_storage_engine.txt」をご確認下さい。
 ウノウの久保さん、住商情報システムの池田さん
  アドバイスありがとうございます。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。


Spiderストレージエンジンが使い方を交えて以下で紹介されています。

ウノウラボ(日本語)
http://labs.unoh.net/2009/07/mysqlspider.html
 ウノウの中村さん
  Spiderのご紹介ありがとうございます。

The Data Charmer(英語)
http://datacharmer.blogspot.com/2009/04/test-driving-spider-storage-engine.html
http://datacharmer.blogspot.com/2009/07/sharding-for-masses-spider-storage.html
 Giuseppeさん
  Spiderのご紹介ありがとうございます。

2009年7月8日

[MySQL][Spider]Spiderストレージエンジン 0.13リリース

Spiderストレージエンジンのバージョン 0.13をリリースしました。
http://spiderformysql.com/

今回の主な変更は以下です。
・テーブルパラメータに「crd_bg_mode」「sts_bg_mode」を追加しました。
・サーバパラメータに「spider_crd_bg_mode」「spider_sts_bg_mode」を追加しました。
 検索などでテーブルを利用する際、MySQLの内部でテーブルの統計情報が必要となります。Spiderストレージエンジンはこれをリモートのテーブルから取得するのですが、これがSQLのオーバーヘッドになることがあります。
 このオプションは、テーブルの統計情報をバックグラウンドで取得することで、オーバーヘッドをなくす効果がありますが、統計情報の取得が非同期になるため、統計情報が頻繁に変化するようなテーブルでは、このオプションを0にしてください。
 ※統計情報取得のオーバーヘッド軽減のオプションはこの他にもありますが、それは別途紹介したいと思います。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年7月3日

[MySQL][Other]Condition Pushdown for ha_partition 0.1リリース

Condition Pushdown for ha_partitionのバージョン0.1をリリースしました。
http://launchpad.net/partitionconditionpushdownformysql

このリリースは、MySQLのテーブルパーティショニング機能(ndb除く)のパッチです。
このパッチを利用すると、テーブルパーティショニング機能を利用したテーブルでも、
engine-condition-pushdownを利用できるようになります。

これまでは、ndbのみがengine-condition-pushdownに対応していたので、問題はなかったのですが、最近Spiderストレージエンジンがengine-condition-pushdownに対応したためこのパッチが必要となり、作成しました。

2009年7月2日

[MySQL][VP]Vertical Partitioningストレージエンジン 0.2リリース

Vertical Partitioningストレージエンジンのバージョン 0.2をリリースしました。
http://launchpad.net/vpformysql


今回の主な変更は以下です。
・テーブルパーティショニングに対応しました。
 前回のリリースでは紹介だけで実装されていなかったテーブルパーティショニングが今回から利用できるようになりました。
 ※この対応により、今回からパッチファイルが追加されていますのでご注意下さい。

・InnoDBのセカンダリindexのPK部分を有効活用するようにしました。
 InnoDBはセカンダリindexにPKのカラムを持っているので、これを以下のような記述で活用できるようにしました。
    create table tbl_b(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a),
      key idx1(col_c)
    )engine=InnoDB;
    create table tbl_c(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a),
      key idx1(col_c)
    )engine=InnoDB;
    create table tbl_a(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a),
      key idx1(col_c, col_a)
    )engine=VP comment='table_name_list "tbl_b tbl_c"';
 ※Vertical Partitioningストレージエンジンは、子テーブルに異なるストレージエンジンのテーブルを持つことができるため、インデックスにPKを持つものと持たないものを混在させることができます。tbl_aのidx1にPKのカラムを記載するようにしているのは、この混在による違いを吸収するためです。


それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年6月30日

[MySQL][Spider]Spiderストレージエンジン 0.12リリース

Spiderストレージエンジンのバージョン 0.12をリリースしました。
http://spiderformysql.com/

Spiderストレージエンジンは、テーブルパーティションとテーブルリンクを組み合わせることで、複数のリモートサーバにあるテーブルを、ローカルサーバにある1つのテーブルとして利用することを可能にするものです。(database sharding)
更新の同期は、Spiderストレージエンジン内部でxaトランザクションを利用して保障します。
資料:
http://www.mysqlconf.com/mysql2009/public/schedule/detail/6837

今回の主な変更は以下です。
(以下に登場する「テーブルパラメータ」とは、テーブル固有のパラメータのことです。詳細は、ダウンロードドキュメント中の「04_table_create.txt」「06_table_parameters.txt」をご確認下さい)
・テーブルパラメータ「table_count_mode」の追加。
  リモートサーバのテーブルが、MyISAMのようなテーブルステータスから正確な全件数を取得できるストレージエンジンを利用している場合のために、テーブルの全件数取得の際にテーブルステータスを利用するオプションを追加しました。

・テーブルパラメータ「select_column_mode」、サーバパラメータ「spider_select_column_mode」の追加。
  select文実行時に取得するカラムの決定方式を、今までのざっくりモードに加え、詳細に割り出すモードを追加し、リモートサーバとの通信量を今までに比べて削減しました。

それ以外の変更については、ダウンロードドキュメント中の「99_change_logs.txt」をご確認下さい。

2009年6月25日

[MySQL][VP]Vertical Partitioningストレージエンジン 0.1リリース

Vertical Partitioningストレージエンジンというストレージエンジンをリリースしました。
http://launchpad.net/vpformysql
このストレージエンジンは、1対1の関係にある複数のテーブルを同一のテーブルのように扱うことを可能にするものです。
これは、1対1の関係にある複数のテーブルをjoinしたviewに似ていますが、MySQLのviewとは以下の点が異なります。
・insertできる。
・パーティションの刈り込みが起こる。(関係のないパーティションは利用しない)


Vertical Partitioningストレージエンジンは以下のような用途で利用できます。
(Vertical Partitioningテーブルを親テーブル、統合されるテーブルを子テーブルと呼びます)


1.レコードサイズの大きいInnoDBテーブルのテーブルスキャンは、レコードが増えるに従ってパフォーマンスが非常に悪くなります。
 Vertical Partitioningストレージエンジンを利用することで、このテーブルのレコードサイズを小さく分割し、パフォーマンスを改善することができます。

  「select col_d from tbl_a」のような検索の性能を改善する場合。
  分割前
    create table tbl_a(
      col_a int primary key,
      col_b int,
      col_c int,
      col_d int,
      col_e varchar(255),
      col_f varchar(255),
      col_g varchar(255),
      col_h varchar(255),
      col_i varchar(255),
      col_j text,
      key idx_a(col_b, col_c),
      key idx_b(col_c, col_j(100))
    )engine=InnoDB;

  分割後
    create table tbl_b(
      col_a int primary key,
      col_b int,
      col_c int,
      col_d int,
      key idx_a(col_b, col_c)
    )engine=InnoDB;
    create table tbl_c(
      col_a int primary key,
      col_c int,
      col_e varchar(255),
      col_f varchar(255),
      col_g varchar(255),
      col_h varchar(255),
      col_i varchar(255),
      col_j text,
      key idx_b(col_c, col_j(100))
    )engine=InnoDB;
    create table tbl_a(
      col_a int primary key,
      col_b int,
      col_c int,
      col_d int,
      col_e varchar(255),
      col_f varchar(255),
      col_g varchar(255),
      col_h varchar(255),
      col_i varchar(255),
      col_j text,
      key idx_a(col_b, col_c),
      key idx_b(col_c, col_j(100))
    )engine=VP
    comment 'table_name_list "tbl_b tbl_c"';
 ※Vertical Partitioningストレージエンジンでは、複数の子テーブルに同じカラムを持つことを許容しています。これにより、分割の設計が柔軟に行えるようにしています。ただし、あまりカラムを重複させると更新のパフォーマンスが悪くなるので注意してください。


2.MySQL Cluster (ndb)はテキストのカラムを扱うことが得意ではありません。
 Vertical Partitioningストレージエンジンは子テーブルを異なるストレージエンジンのテーブルで構成できるため、MySQL Clusterに得意とするカラムだけを担当させることができます。
  ストレージエンジン混在例
    create table tbl_b(
      col_a int primary key,
      col_b int,
      col_c int,
      key idx_a(col_b, col_c)
    )engine=ndb ......;
    create table tbl_c(
      col_a int primary key,
      col_c int,
      col_d varchar(255),
      col_e text,
      key idx_b(col_c, col_e(100))
    )engine=Spider ......;
    create table tbl_a(
      col_a int primary key,
      col_b int,
      col_c int,
      col_d varchar(255),
      col_e text,
      key idx_a(col_b, col_c),
      key idx_b(col_c, col_e(100))
    )engine=VP
    comment 'table_name_list "tbl_b tbl_c"';


3.MySQLはmulti shaped partitioningをまだサポートしていませんが、
 Vertical Partitioningストレージエンジンを利用することでそれが利用できるようになります。
 1つのテーブルを異なる条件で分割することを、ここではmulti shaped partitioningと呼んでいます。
 この機能を使うと詳細用のテーブルとインデックス用のテーブルを分けたものを1つのテーブルとして扱うことができ、さらにそれぞれのテーブルをSpiderストレージエンジンを使ってshardingすることができます。

  分割前
    create table employees (
      id int primary key,
      fname varchar(30),
      lname varchar(30),
      hired date not null default '1970-01-01',
      separated date not null default '9999-12-31',
      job_code int,
      store_id int
    )engine=InnoDB;

  分割後
    create table emp_pk (
      id int not null,
      separated date not null default '9999-12-31',
      unique idx_a(id),
      key idx_b(id, separated)
    )engine=InnoDB
    partition by hash(id)
    partitions 4;
    create table emp_detail (
      id int not null,
      fname varchar(30),
      lname varchar(30),
      hired date not null default '1970-01-01',
      separated date not null default '9999-12-31',
      job_code int,
      store_id int,
      key idx_a(id, separated)
    )engine=InnoDB
    partition by range ( year(separated) ) (
      partition p0 values less than (1991),
      partition p1 values less than (1996),
      partition p2 values less than (2001),
      partition p3 values less than maxvalue
    );
    create table employees (
      id int not null,
      fname varchar(30),
      lname varchar(30),
      hired date not null default '1970-01-01',
      separated date not null default '9999-12-31',
      job_code int,
      store_id int,
      primary key(id, separated)
    )engine=VP
    comment 'table_name_list "emp_pk emp_detail", pk_correspond_mode "1"';
 ※ここでは、どちらの子テーブルにアクセスしてもパーティションの刈り込みが利用できるよう、親テーブルのPKに両方のパーティションの条件に利用するカラムを定義しています。(今後はPKにidのみを指定しても刈り込みが利用できるよう改善を計画中)


4.Vertical Partitioningストレージエンジンは、Spiderストレージエンジンのようなパラレル検索に対応したストレージエンジンに、Vertical Partition単位のパラレル検索能力を与えます。(現在未実装)


5.Vertical Partitioningストレージエンジンは、MySQLのパーティションをサポートしているので、パーティションのラッパーとして利用できます。
 これにより、各パーティションをテーブルとして個別に利用する事ができます。(現在未実装なのでこの機能はまだ使用しないで下さい)
  利用例
    create table tbl_b(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a)
    )engine=InnoDB;
    create table tbl_c(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a)
    )engine=InnoDB;
    create table tbl_d(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a)
    )engine=InnoDB;
    create table tbl_a(
      col_a int not null,
      col_b varchar(20),
      col_c int not null,
      primary key(col_a)
    )engine=VP
    partition by hash(col_a)
    (
      partition pt1 comment='table_name_list "tbl_b"',
      partition pt2 comment='table_name_list "tbl_c"',
      partition pt3 comment='table_name_list "tbl_d"'
    );


現在は、αリリースでまだ使えない機能もありますが、なるべく早めにリリースするつもりです。
ご期待下さい。