こんにちは。CTOの馬場です。
ちょっと、いや、かなり間が空いてしまいましたが、今回もインフラエンジニア向けにちょっとした情報を紹介します。
先日hbstudy#13が開催されました。
奥野さんからお話しいただいた「Art Of MySQL Replication」の中で紹介されていた、Blackholeストレージエンジンの活用のところで目からウロコだったので、補足してみます。
Blackholeストレージエンジンの活用方法としては、以下のものが有名でしょうか。
- クエリをキューイングする
- 暖気運転する
- UDF(ユーザ定義関数)を利用して、Slave側でのみ処理を実行する
1.については、書籍「4Gbpsを超えるWebサービス構築術」に解説されてますし、 2.についてはhbstudy直後に割と話題になっているので、 3.について紹介してみます。
といっても、やっていることは簡単で、 紹介されている通りmemcachedのデータ更新を セミリアルタイムで実施するためのしくみとして活用しているようです。
うまく利用すれば、ランキングデータの更新/参照など リアルタイム性の高いデータの更新/参照をうまく制御できるようになりそうです。
※実は常識だったらスミマセン
前提として、プログラムが下記の流れでデータを取得するように 組まれている必要があります。
- データが欲しい時、まずmemcachedをチェックする
- memcachedにデータがない場合のみ、DBに問合せする
プログラムからのデータ更新の流れは下記の通りになります。
- プログラムがDBにデータを登録(insert/update)
- UDFを実行(トリガーにすることで自動化できる)
- memcachedに最新データが登録される
全slaveでUDFを実行しても無駄な可能性が高いので、 特定のslaveでのみ実行するUDFを作成するなど、 UDF側で工夫が必要そうです。
また、上記前提のプログラムだと、 memcachedでミスヒットしたタイミングで DBに大量のクエリが発行される可能性があるので、 それを抑える仕組みを別途用意したほうがよさそうです。
例えば、データ取得は個々のプログラムインスタンスが行うのではなく、 API化してキューイングして特定商数のインスタンスが担当するなどなど。
と、いうわけで、目からウロコのUDF+Blackhole。 みなさまぜひ使ってみてください。