本格SEもすなる、技術ブログといふものを、駄目SEもしてみむとて、するなり

AWSでRDS使いつつ全文検索もしたい!(CDP新提案)

本日はCDP Advent Calendar 2013 on Zusaarの7日目のエントリを書きます
毎年AWSは相も変わらず、新機能ラッシュですね。今年は個人的にRDS関連の新機能が目立った気がします。Read ReplicaのMaster昇格やリージョン間スナップショットコピー、PostgreSQL対応など盛りだくさんでした。
今日は、RDSを使ってCDPの新提案してみます。

ここからは、CDPのテンプレートに則って書いて行きます。

CDPの内容

解決したい課題

「世界でもっとも普及している、オープン ソース データベース」であるMySQLは、本来様々なストレージ・エンジンを使用でき、様々な検索特性に変更できる。しかし、クラウド環境でサービスとして提供している物では、ほとんどの場合MyISAMはInnnoDBしか使用できない。
好きなストレージエンジンを使用する場合は、自前でMySQLの運用など行わなければいけない。

クラウドでの解決/パターンの説明

MySQLでは、標準機能でMaster-Slaveのレプリケーション構成を構築できる。Masterにクラウドで提供しているDBサービスを使用し、バックアップ等の運用の手間を軽減し、Slaveを自前で構築し、自由にストレージエンジンを構成する。

実装

AWSでは、RDBMSサービスの「RDS」が使用でき、他のMySQLレプリケーションできる。RDSをMasterにし、別途EC2にインストールしたMySQLレプリケーションする。

  • RDSをMasterとして作成する。
  • EC2へMySQLをインストールし、好きなストレージエンジンで構成する。
  • RDSからMySQL on EC2へレプリケーションを行う。
構造

f:id:maroon1st:20131207151628j:plain

利点
  • 好きなストレージエンジンで検索できるので、全文検索(mroonga)等を高速に行える。
  • バックアップ等の運用管理の手間が軽減される。
注意点
  • EC2上のMySQLはSPOFにならないように複数台構成することが望ましい。
  • ストレージエンジンによってはINSERT/UPDATEが不得意なものがあるため、レプリケーションが詰まる可能性がある。
  • レプリケーション対象は、インスタンス全体ではなく対象のDBに絞る必要がある。
その他
  • 未検証ではあるが、DWH用ストレージエンジンを使用すれば集計処理を高速に行うことも可能になる。
  • Attunity Replicate等のソフトウェアを使用すれば、同様の構成をRDS->Redshiftで可能になる。

まとめ

実は、JAWS-UG 千葉團の第1回でやったLTネタ(みんな大好き“全文検索 on AWS”を試してみました!)をまとめた物です。
名付けて、"Complex Searcher パターン"!
これは、id:understeer さんが、RDS: MySQL5.6 のbinlogアクセス権限 - aws memo でRDSにMySQL 5.6が使えるようになったら、REPLICATION SLAVE権限が使えるようになってたと書いていたの覚えていたのが始まりでした。その後、ElasticSearchとか検索エンジンが盛り上がってきましたが、カジュアルに使うならmroongaだろ!と思ったので、このパターンを思いつきました。

最後に

タイトルだけはCDPのサイトに3か月前からあったんですが、ずっと手付かずだったのですが、Advent Calendarがあったので整理しました。
SQLアンチパターンという本をを読んで気が付いたのですが、CDPはネーミングが今一つです。もう少しセンスが有る名称にしましょう。
個人的にセンスが有ると思っているのは、Counter TableパターンとKraken SSLパターンですね。実用性は考えないよ!


この内容でCDPのサイトにアップするかな。