超カジュアルに使うMySQL @ MySQL Casual Talks #2

37
超Casualに使う MySQL 末永 a.k.a. グニャラくん

Transcript of 超カジュアルに使うMySQL @ MySQL Casual Talks #2

Page 1: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

超Casualに使うMySQL

末永 匡 a.k.a.

グニャラくん

Page 2: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

いきなりですが •  わたくし、この勉強会に不満があるんです

Page 3: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

Casualちゃうやん! •  MySQL脳の人たちがうようよいる •  会場も、鳥貴族とかじゃない

俺が本当のカジュアルを見せてやるぜ

Page 4: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

自己紹介 •  グニャラくん @tasukuchan •  株式会社ディー・エヌ・エーでスマートフォン向けアプリの作成に従事

Page 5: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

前職での経歴 •  全文検索エンジンSenna/groongaの開発に従事

•  ニコニコ大百科の開発に従事

Page 6: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

なんで経歴紹介したか •  ミドルウェアの開発 •  サービスの開発 •  サービスの運用

•  すべての経験がある

今回、サービス作成者側の立場で話す

Page 7: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

11/08/10

本日のテーマ •  「MySQLをもっとカジュアルに使おう!」

うわっ…私のMySQL、フォーマルすぎ…?

Page 8: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

なんでいまさら? •  最近はNoSQLの時代だしー •  スキーマレスだしー •  MySQL遅いらしいしー •  超ダルいしー

MySQLの危機!

Page 9: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

まずはMySQL •  最初の選択として、MySQLを使いましょう。

なんで…?

Page 10: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

11/08/10

例を挙げる

Page 11: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

11/08/10

Page 12: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

MongoDBを半年運用してみた •  お疲れ様でした…

•  MongoDBはすぐれたミドルウェア

現時点では運用ノウハウが少ない

Page 13: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

あるあるネタ

11/08/10

Page 14: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

11/08/10

あるアプリケーション開発者 •  「運用ぉ~、Node.jsとRedisで作ったカッケーシステム、メンテよろー^^」

http://jigokuno.com/?cid=71 より引用

Page 15: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

すると…

11/08/10

Page 16: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

運用担当者

http://www13.ocn.ne.jp/̃titititi/torauma/torauma1.5.htm清野とおる トラウマンガ館 第1話・「森よしき君のお母さんに怒られた事」より引用

Page 17: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

なんで怒られるのッ!? •  運用実績のないシステムの運用は大変!

そのシステムを維持する人件費を考えたら、サーバ買ったほうがトータルの性能上がるよね

Page 18: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

運用担当者の気持ちになろう •  自分が24時間365日お守りできるか

Page 19: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

MySQLは枯れている •  運用事例が本やネット上にいっぱいある

•  製品だし(ゴマすり)

運用担当者も安心

Page 20: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

楽しみは最後にとっておく •  ミドルウェアは、必要になった時点で導入すればいい

•  MongoDB etc.が真に必要になったとき、 – B to Cなら、すでにサービスが大当たりしている

– B to Bなら、新たな仕事が発生する

お楽しみはあ・と・で

Page 21: 超カジュアルに使うMySQL @ MySQL Casual Talks #2
Page 22: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

どうカジュアルに使おう •  いきなりカジュアル言われても…

カジュアルでもドレスコードはある

Page 23: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

間違ったカジュアル

価格性能比が悪い!

http://jigokuno.com/?cid=36 より引用

Page 24: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

こんなカジュアルありじゃね? •  具体例を挙げる

この夏向けのカジュアルを提案

Page 25: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

カジュアルスキーマ •  スキーマなんてサービス作っているうちに変わっちゃう

•  だったら、スキーマをカジュアルにしちゃえ★ミ

実務ではよく見るスキーマ

Page 26: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

カジュアルスキーマ実例

Page 27: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

11/08/10

どんなスキーマか •  idは贅沢にBIGINT •  JSONとかXMLとかをvalueカラムに保存 •  natural_key/created/updatedは礼儀としてカラムを分けておく

•  created/updatedはTIMESTAMPでもいいかも

超カジュアル!

Page 28: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

そもそもなぜスキーマが必要か •  スキーマで定義された情報に基づいて、絞込、グループ化、ソート、JOINなどを行うから (ホントはドメインによる制約や、正規化による効用などもあるけど…)

SQLでの処理が必要なければ、 スキーマは当面いらない

Page 29: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

超カジュアルからカジュアルへ •  データ量が多くなるにつれて、超カジュアルではいられなくなる

オトナへの脱皮

Page 30: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

インデックスどうするねん •  インデックスが必要だったら、別のテーブルを作成する(Friendfeed方式)

•  参考)スキーマ不定のデータをRDBに永続化する方法の比較@ありえるえりあ http://dev.ariel-networks.com/Members/inoue/schemaless/

Page 31: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

スキーマの動的な変更 •  あとになってSQLで複雑な問い合わせしたくなったりしたらどうすんねん!

カラムを追加すればいいじゃない? (by マリー・アントワネット)

Page 32: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

でも動的カラム追加は遅いじゃん •  MySQLのALTER TABLEは一般的に遅い

– MySQL 5.1のFast index createでインデックス生成は改良されたけど

•  対象テーブルにロックがかかる! – 事実上のサービス停止に

カジュアル野郎にダマされたッ!

Page 33: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

カラムの動的な追加(1) •  openarkkit

http://code.google.com/p/openarkkit/

– MySQL便利グッズ詰め合わせ •  oak-online-alter-table

– 別の一時テーブルを新スキーマで作成し – 元テーブルからデータコピー – 差分を補正する – リネーム

Page 34: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

カラムの動的な追加(2) •  OnlineSchemaChange.php by Facebook

http://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932

– 基本的にはoak-online-alter-tableと一緒

制約はあるが、なんとかなるよ

Page 35: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

ちょっとした工夫 •  MessagePack + Snappyで保存

http://dayafterneet.blogspot.com/2011/05/google-snappy-twitter-json.html

データ容量も圧縮できる

Page 36: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

まとめ •  運用担当者は大事にしよう

•  カジュアルスキーマでも結構なんとかなるよ

Page 37: 超カジュアルに使うMySQL @ MySQL Casual Talks #2

Welcome to casual MySQL world!