MySQL勉強会in大阪 に参加してみました

大阪だったので行ってみました。
MySQL勉強会in大阪 : ATND

お題目

MySQL/memcachedを利用した負荷分散」という主題でしたが
開始前に、MySQL5.5(.4)についてのお話がありました。


どうやら、明日(12/8)の16時からセミナーがあるようで
それに関連した内容をチラットお話されていました。
MySQL :: MySQL セミナーのご案内

Oracle - MySQL

Oracleの中でもMySQLは別部署(独立している。Sunの時代からも同じような感じだったらしい)
OracleMySQLに対して投資を約束
・Community版(GPL)の継続を約束
Oracle Enterprise Manager他、MySQLをサポート予定
→背景としては、Oracleユーザの70%程度がMySQLユーザでもあるとの調査結果から。

DBのシェアについて

IPAのOSS調査報告では2009年にPostgreSQLを抜いて1位。
また、itmediaの調査結果では

企業利用の全てのDB製品としては下記。
 Oracle 72%
 MS SQL Server 53%
 MySQL 42%
 PostgreSQL 33%
 DB2 22%
(企業内で最も利用されているDB製品でも同じ並び)


SQLServer って結構すごいな。

MySQL5.5について

InnoDBがデフォルト
・性能up
 多重度上げても(グラフ上は1024)、スループットそんなに落ちません
 (5.1系に比べて数倍頑張ってる)
→ググったら関連資料がでてきた。(osc2010-nagoya
 read/writeも1.5倍(5.1系に比べて)
 InnoDBのクラッシュリカバリ10倍
・準同期レプリケーション
→詳細は明日。

MemcachedとMySQL連携

そもそもmemcacheとはという話から事例などお話されてました(この辺は省略)。
気になったとこだけ。

・連携方法(リードパススルー方式)
 1.memcachedを見てキャッシュされていればキャッシュデータを使用
 2.ミスキャッシュの場合、DBからデータを取得しmemcachedを更新


→実現方法は、アプリで実装 or MySQLをいじる 2パターン。
以下、後者の話。


・UDF(ユーザ定義関数)
MySQLからCのライブラリを呼ぶ関数を作れる。
MySQL :: MySQL 5.1 Reference Manual :: 14.5.3.7 Using the MySQL memcached UDFs

CREATE FUNCTION memc_get RETURNS STRING SONAME "libmemcached_functions_mysql.so";

こんな感じでUDFを作る。
あとは、TRIGGER作っておいて、DB更新時にmemcachedも更新すると。
※スライド資料上のCREATE TRIGGER が BEFORE INSERTになってたけど
※AFTER INSERTの方が良さそうな気がする。


・ストレージエンジンに手を入れる
結構事例としてはあるらしい。細かい話は特になかった。

MySQL Cluster

・NDB API
C++用のAPIで直でデータにアクセス可能。Java版もあるらしい。
使用方法がKVSに似ている。
そうすると、memcachedより可用性あるよ(ACID)。

その他 wikipedia

wikipediaが事例としていて出てきて
そのなかで構成図とか公開されているという話があったので
調べてみたら、面白そうな資料が出てきた。


構成:Wikitech

構成図:File:Wikimedia-servers-2009-04-05.svg - Meta

media wiki のER図:Mediawiki-database-schema.png 2958×1477 ピクセル

感想

MySQL5.4に希望が持てそうな感じなのと、知らなかった話も聞けて良かったです。
memcachedについては、MySQL + UDF + TRIGGER方式はなかなか良さそうな感じがしました。


ただ、アプリケーションフレームワークでも割と簡単に連携できたりするので
そっちと比較検討して選択という感じでしょうか。


でも、NoSQLとしてMySQLを使うDeNAが、memcachedよりも高速な75万クエリ/秒を実現 − Publickey
のようにmemcachedなくても高速だよ〜んという話がある中で
なぜ今memcachedの話なのか、あんまりよくわかんなかったです。
MySQL + UDF + TRIGGER方式って最近の話なのかな?