超カジュアルに使うMySQL @ MySQL Casual Talks #2
-
Upload
tasuku-suenaga -
Category
Technology
-
view
23.218 -
download
1
Transcript of 超カジュアルに使うMySQL @ MySQL Casual Talks #2
超Casualに使うMySQL
末永 匡 a.k.a.
グニャラくん
いきなりですが • わたくし、この勉強会に不満があるんです
Casualちゃうやん! • MySQL脳の人たちがうようよいる • 会場も、鳥貴族とかじゃない
俺が本当のカジュアルを見せてやるぜ
自己紹介 • グニャラくん @tasukuchan • 株式会社ディー・エヌ・エーでスマートフォン向けアプリの作成に従事
前職での経歴 • 全文検索エンジンSenna/groongaの開発に従事
• ニコニコ大百科の開発に従事
なんで経歴紹介したか • ミドルウェアの開発 • サービスの開発 • サービスの運用
• すべての経験がある
今回、サービス作成者側の立場で話す
11/08/10
本日のテーマ • 「MySQLをもっとカジュアルに使おう!」
うわっ…私のMySQL、フォーマルすぎ…?
なんでいまさら? • 最近はNoSQLの時代だしー • スキーマレスだしー • MySQL遅いらしいしー • 超ダルいしー
MySQLの危機!
まずはMySQL • 最初の選択として、MySQLを使いましょう。
なんで…?
11/08/10
例を挙げる
11/08/10
MongoDBを半年運用してみた • お疲れ様でした…
• MongoDBはすぐれたミドルウェア
現時点では運用ノウハウが少ない
あるあるネタ
11/08/10
11/08/10
あるアプリケーション開発者 • 「運用ぉ~、Node.jsとRedisで作ったカッケーシステム、メンテよろー^^」
http://jigokuno.com/?cid=71 より引用
すると…
11/08/10
運用担当者
http://www13.ocn.ne.jp/̃titititi/torauma/torauma1.5.htm清野とおる トラウマンガ館 第1話・「森よしき君のお母さんに怒られた事」より引用
なんで怒られるのッ!? • 運用実績のないシステムの運用は大変!
そのシステムを維持する人件費を考えたら、サーバ買ったほうがトータルの性能上がるよね
運用担当者の気持ちになろう • 自分が24時間365日お守りできるか
MySQLは枯れている • 運用事例が本やネット上にいっぱいある
• 製品だし(ゴマすり)
運用担当者も安心
楽しみは最後にとっておく • ミドルウェアは、必要になった時点で導入すればいい
• MongoDB etc.が真に必要になったとき、 – B to Cなら、すでにサービスが大当たりしている
– B to Bなら、新たな仕事が発生する
お楽しみはあ・と・で
どうカジュアルに使おう • いきなりカジュアル言われても…
カジュアルでもドレスコードはある
間違ったカジュアル
価格性能比が悪い!
http://jigokuno.com/?cid=36 より引用
こんなカジュアルありじゃね? • 具体例を挙げる
この夏向けのカジュアルを提案
カジュアルスキーマ • スキーマなんてサービス作っているうちに変わっちゃう
• だったら、スキーマをカジュアルにしちゃえ★ミ
実務ではよく見るスキーマ
カジュアルスキーマ実例
11/08/10
どんなスキーマか • idは贅沢にBIGINT • JSONとかXMLとかをvalueカラムに保存 • natural_key/created/updatedは礼儀としてカラムを分けておく
• created/updatedはTIMESTAMPでもいいかも
超カジュアル!
そもそもなぜスキーマが必要か • スキーマで定義された情報に基づいて、絞込、グループ化、ソート、JOINなどを行うから (ホントはドメインによる制約や、正規化による効用などもあるけど…)
SQLでの処理が必要なければ、 スキーマは当面いらない
超カジュアルからカジュアルへ • データ量が多くなるにつれて、超カジュアルではいられなくなる
オトナへの脱皮
インデックスどうするねん • インデックスが必要だったら、別のテーブルを作成する(Friendfeed方式)
• 参考)スキーマ不定のデータをRDBに永続化する方法の比較@ありえるえりあ http://dev.ariel-networks.com/Members/inoue/schemaless/
スキーマの動的な変更 • あとになってSQLで複雑な問い合わせしたくなったりしたらどうすんねん!
カラムを追加すればいいじゃない? (by マリー・アントワネット)
でも動的カラム追加は遅いじゃん • MySQLのALTER TABLEは一般的に遅い
– MySQL 5.1のFast index createでインデックス生成は改良されたけど
• 対象テーブルにロックがかかる! – 事実上のサービス停止に
カジュアル野郎にダマされたッ!
カラムの動的な追加(1) • openarkkit
http://code.google.com/p/openarkkit/
– MySQL便利グッズ詰め合わせ • oak-online-alter-table
– 別の一時テーブルを新スキーマで作成し – 元テーブルからデータコピー – 差分を補正する – リネーム
カラムの動的な追加(2) • OnlineSchemaChange.php by Facebook
http://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932
– 基本的にはoak-online-alter-tableと一緒
制約はあるが、なんとかなるよ
ちょっとした工夫 • MessagePack + Snappyで保存
http://dayafterneet.blogspot.com/2011/05/google-snappy-twitter-json.html
データ容量も圧縮できる
まとめ • 運用担当者は大事にしよう
• カジュアルスキーマでも結構なんとかなるよ
Welcome to casual MySQL world!