rdb経験者に送るmongodbの勘所(db tech showcase tokyo 2013)
DESCRIPTION
RDBとの比較でMongoDBの特徴を紹介しています。TRANSCRIPT
RDB経験者に送る MongoDBの勘所
!
玉川竜司
自己紹介• 玉川竜司
• FB: Ryuji Tamagawa
• Twitter: tamagawa_ryuji
• 本業ソフト開発(Sky株式会社)
• 兼業翻訳者(ほぼオライリー)
もうすぐ出ます
今日のお題は
MongoDB
MongoDBのいいところ• 一言で言うなら「お手軽」 - いい意味で
• Webアプリケーションで求められる機能が手っ取り早く使える
• 多目的の高性能「オートマ車」
• インストーラやパッケージですぐ動きます
• クラウド上で実績多数
• 多くの言語で、仕様がある程度統一されているドライバが利用可能
ただし• 集計は(今のところ)苦手
• (ほんとの)ビッグデータはちょっと難しいかも
• 基本的に、オンメモリでいけるかどうかが問題
• そういえば、でかいメモリのインスタンス、AWSでもAzureでもさくらでも増えましたね・・・
RDBとの違い• 物理構造の違い
• 論理構造の違い
• トレードオフの柔軟性
• レプリカセット
• シャーディング
物理構造の違い
RDB MongoDB
データファイル
エンジンが管理する (物理)メモリバッファ
データ(メモリマップドファイル)
OSが管理するメモリ
物理構造の違い(2)
• とにかく、「ホット」なデータが物理メモリに収まるかが肝心
• RDBほど細かなメモリのチューニングはできない
• データが大きいなら、RAMを増やすか、シャーディングでスケールアウト
論理構造の違い
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!", }
論理構造の違い(2)• スキーマの自由度は高い(特に変更に強い)
• ドキュメントを超えたアトミック性はない
• 設計上のトレードオフが生じる
• 一つのドキュメントで閉じない場合はIDで参照
• そうなると、処理をプログラムで書く必要が出てくる
トレードオフの柔軟性
RDB MongoDB
書いたら がっつり 永続化
トランザクション はデフォルト
書き込み保証 する?しない? しなけりゃ高速
WAL使う?
いくつのレプリカへ書けたら成功したことにする?
トレードオフの柔軟性(2)• 書き込みの確実性とパフォーマンスはトレードオフ
• 大量のログの記録などでは、多少こぼれるリスクを抱えてもコストダウンしたいこともある
• 逆に、データセンター間で複製できていることを保証したいこともある
• 書き込み保証(Write Concern)、WAL、レプリカへの書き込み、タギングなどで、多彩な調整が可能
レプリカセットとシャーディングについてちょっと注釈
• これらについては、「技術的には」RDBとの対立概念ではない
• ただし、商用RDBではコストが跳ね上がる(ですよね?)機能
• MongoDBでは最初から組み込まれて、非常にお手軽 & 便利
レプリカセット
Repreca-Master
Repreca-Slave
Repreca-Slave
書込
複製
Client-App
Driver
読取
レプリカセット(マスター交代)
Repreca-Master
Repreca-Master
Repreca-Slave書込
複製
Client-App
Driver
読取
レプリカセット (パフォーマンストレードオフ)
Repreca-Master (インデックスあり)
Repreca-Slave (インデックスあり)
Repreca-Slave (バックアップ)
書込
複製
Client-App
Driver
読取
バックアップ用のインスタンスにはインデックスを付けず、非力なマシンで済ませる
DC-2DC-1
レプリカセット(DC間での分散)
Repreca-Master
Repreca-Slave
Repreca-Slave
書込
複製
Client-App
Driver
読取
レプリカセットのまとめ
• 読み取り負荷の分散
• 耐障害性
• 自動フェイルオーバー & リカバリ
• 多彩なトレードオフ
シャーディング•書き込み負荷を1/nに
• メモリ量をn倍に
• パフォーマンスは上がる
• 障害は起きやすくなる→レプリカセットと併用
Client-App
Driver
mongos
mongod for あかさたな
mongod for はまやらわ
シャーディング(意味なしパターン)
• ホットになるのは最新のシャードばかり
• 順序づけできるシャードキーは要注意
• キーにはハッシュ的なデータが向く
• 場合によっては複合キーを使う
Client-App
Driver
mongos
mongod for 2013/10
mongod for 2013/11
mongod for 2013/9
シャーディングのまとめ
• 「わりとビッグ」なデータに対応するための仕組み →どのくらいビッグかはハードによるが、期待しすぎは禁物
• キーの選択がキモ
• 耐障害性はシャーディングと組み合わせて担保
RDBに似ているところは?
柔軟なインデックス!
柔軟なインデックス• NoSQLエンジンは、インデックスが限定的なものが多い
• MongoDBは、BSONデータのどこにでもインデックスを張れる
• 複合キーも張れる
• いくつでも張れる
• クエリオプティマイザがキーの有無を(ある程度)ちゃんと見てくれる
まとめ
今日話したこと• この本に事細かに書かれています。 • 電子書籍もあります。 • http://www.oreilly.co.jp/
books/9784873115900/ • そのほかにもMongoDB関連の電子
書籍があるので、オライリージャパ
ンのサイトで検索を。
それはともかく• 簡単に始められて
• かなり深く使うこともできます
• ただし落とし穴もあります→コミュニティへどうぞ! http://www.mongodb.jp
• まずは手を動かしてみましょう!
最後に告知• 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
ご清聴ありがとうございました。