大阪だったので行ってみました。
MySQL勉強会in大阪 : ATND
お題目
「MySQL/memcachedを利用した負荷分散」という主題でしたが
開始前に、MySQL5.5(.4)についてのお話がありました。
どうやら、明日(12/8)の16時からセミナーがあるようで
それに関連した内容をチラットお話されていました。
MySQL :: MySQL セミナーのご案内
Oracle - MySQL
・Oracleの中でもMySQLは別部署(独立している。Sunの時代からも同じような感じだったらしい)
・OracleはMySQLに対して投資を約束
・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方式って最近の話なのかな?