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

Post on 10-Jul-2015

23.216 views 1 download

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!