RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

29
RDB経験者に送る MongoDBの勘所 玉川竜司

description

RDBとの比較でMongoDBの特徴を紹介しています。

Transcript of RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

Page 1: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

RDB経験者に送る MongoDBの勘所

!

玉川竜司

Page 2: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

自己紹介• 玉川竜司

• FB: Ryuji Tamagawa

• Twitter: tamagawa_ryuji

• 本業ソフト開発(Sky株式会社)

• 兼業翻訳者(ほぼオライリー)

Page 3: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

もうすぐ出ます

Page 4: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

今日のお題は

MongoDB

Page 5: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

MongoDBのいいところ• 一言で言うなら「お手軽」 - いい意味で

• Webアプリケーションで求められる機能が手っ取り早く使える

• 多目的の高性能「オートマ車」

• インストーラやパッケージですぐ動きます

• クラウド上で実績多数

• 多くの言語で、仕様がある程度統一されているドライバが利用可能

Page 6: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

ただし• 集計は(今のところ)苦手

• (ほんとの)ビッグデータはちょっと難しいかも

• 基本的に、オンメモリでいけるかどうかが問題

• そういえば、でかいメモリのインスタンス、AWSでもAzureでもさくらでも増えましたね・・・

Page 7: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

RDBとの違い• 物理構造の違い

• 論理構造の違い

• トレードオフの柔軟性

• レプリカセット

• シャーディング

Page 8: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

物理構造の違い

RDB MongoDB

データファイル

エンジンが管理する (物理)メモリバッファ

データ(メモリマップドファイル)

OSが管理するメモリ

Page 9: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

物理構造の違い(2)

• とにかく、「ホット」なデータが物理メモリに収まるかが肝心

• RDBほど細かなメモリのチューニングはできない

• データが大きいなら、RAMを増やすか、シャーディングでスケールアウト

Page 10: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

論理構造の違い

RDB MongoDB{ _id: new ObjectId("6a5b1476238d3b4dd5000048"), slug: "gardening-tools", ancestors: [{ name: "Home", _id: new ObjectId("8b87fb1476238d3b4dd500003"), slug: "home" }, { name: "Outdoors", _id: new ObjectId(“9a9fb1476238d3b4dd5000001"), slug: "outdoors" } ], parent_id: new ObjectId("9a9fb1476238d3b4dd5000001"), name: "Gardening Tools", description: "Gardening gadgets galore!", }

Page 11: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

論理構造の違い(2)• スキーマの自由度は高い(特に変更に強い)

• ドキュメントを超えたアトミック性はない

• 設計上のトレードオフが生じる

• 一つのドキュメントで閉じない場合はIDで参照

• そうなると、処理をプログラムで書く必要が出てくる

Page 12: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

トレードオフの柔軟性

RDB MongoDB

書いたら がっつり 永続化

トランザクション はデフォルト

書き込み保証 する?しない? しなけりゃ高速

WAL使う?

いくつのレプリカへ書けたら成功したことにする?

Page 13: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

トレードオフの柔軟性(2)• 書き込みの確実性とパフォーマンスはトレードオフ

• 大量のログの記録などでは、多少こぼれるリスクを抱えてもコストダウンしたいこともある

• 逆に、データセンター間で複製できていることを保証したいこともある

• 書き込み保証(Write Concern)、WAL、レプリカへの書き込み、タギングなどで、多彩な調整が可能

Page 14: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

レプリカセットとシャーディングについてちょっと注釈

• これらについては、「技術的には」RDBとの対立概念ではない

• ただし、商用RDBではコストが跳ね上がる(ですよね?)機能

• MongoDBでは最初から組み込まれて、非常にお手軽 & 便利

Page 15: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

レプリカセット

Repreca-Master

Repreca-Slave

Repreca-Slave

書込

複製

Client-App

Driver

読取

Page 16: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

レプリカセット(マスター交代)

Repreca-Master

Repreca-Master

Repreca-Slave書込

複製

Client-App

Driver

読取

Page 17: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

レプリカセット (パフォーマンストレードオフ)

Repreca-Master (インデックスあり)

Repreca-Slave (インデックスあり)

Repreca-Slave (バックアップ)

書込

複製

Client-App

Driver

読取

バックアップ用のインスタンスにはインデックスを付けず、非力なマシンで済ませる

Page 18: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

DC-2DC-1

レプリカセット(DC間での分散)

Repreca-Master

Repreca-Slave

Repreca-Slave

書込

複製

Client-App

Driver

読取

Page 19: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

レプリカセットのまとめ

• 読み取り負荷の分散

• 耐障害性

• 自動フェイルオーバー & リカバリ

• 多彩なトレードオフ

Page 20: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

シャーディング•書き込み負荷を1/nに

• メモリ量をn倍に

• パフォーマンスは上がる

• 障害は起きやすくなる→レプリカセットと併用

Client-App

Driver

mongos

mongod for あかさたな

mongod for はまやらわ

Page 21: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

シャーディング(意味なしパターン)

• ホットになるのは最新のシャードばかり

• 順序づけできるシャードキーは要注意

• キーにはハッシュ的なデータが向く

• 場合によっては複合キーを使う

Client-App

Driver

mongos

mongod for 2013/10

mongod for 2013/11

mongod for 2013/9

Page 22: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

シャーディングのまとめ

• 「わりとビッグ」なデータに対応するための仕組み →どのくらいビッグかはハードによるが、期待しすぎは禁物

• キーの選択がキモ

• 耐障害性はシャーディングと組み合わせて担保

Page 23: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

RDBに似ているところは?

柔軟なインデックス!

Page 24: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

柔軟なインデックス• NoSQLエンジンは、インデックスが限定的なものが多い

• MongoDBは、BSONデータのどこにでもインデックスを張れる

• 複合キーも張れる

• いくつでも張れる

• クエリオプティマイザがキーの有無を(ある程度)ちゃんと見てくれる

Page 25: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

まとめ

Page 26: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

今日話したこと• この本に事細かに書かれています。 • 電子書籍もあります。 • http://www.oreilly.co.jp/

books/9784873115900/ • そのほかにもMongoDB関連の電子

書籍があるので、オライリージャパ

ンのサイトで検索を。

Page 27: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

それはともかく• 簡単に始められて

• かなり深く使うこともできます

• ただし落とし穴もあります→コミュニティへどうぞ! http://www.mongodb.jp

• まずは手を動かしてみましょう!

Page 28: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

最後に告知• MongoDB Tokyo 2013 開催

• 日時:12/12(木)

• 申し込みサイト:http://atnd.org/event/mongodbtokyo2013

• MongoDB University 日本語講座:第2弾開催

• 日時:11/25~

• 申し込みサイト:https://education.mongodb.com/courses/10gen/M101P/2013_November/about

Page 29: RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)

ご清聴ありがとうございました。