SlideShare a Scribd company logo
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では最初から組み込まれて、非常にお手軽 & 便利
レプリカセット
Client-App
Driver

書込

読取

Repreca-Slave

複製

Repreca-Master
Repreca-Slave
レプリカセット(マスター交代)
Client-App
Driver

読取
書込

Repreca-Slave
複製

Repreca-Master
Repreca-Master
レプリカセット
(パフォーマンストレードオフ)
Client-App
Driver

書込

読取
Repreca-Slave

Repreca-Master

(バックアップ)

複製

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

バックアップ用のインスタン
スにはインデックスを付けず、
非力なマシンで済ませる
レプリカセット(DC間での分散)
Client-App
Driver
書込

Repreca-Master

複製

読取

Repreca-Slave

Repreca-Slave

DC-1

DC-2
レプリカセットのまとめ
•

読み取り負荷の分散

•

耐障害性

•

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

•

多彩なトレードオフ
シャーディング
Client-App
•
•

mongod for

mongod for

あかさたな

はまやらわ

パフォーマンスは上がる

•

mongos

メモリ量をn倍に

•

Driver

書き込み負荷を1/nに

障害は起きやすくなる

→レプリカセットと併用
シャーディング(意味なしパターン)
Client-App
Driver

•

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

•

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

•

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

•

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

mongos

mongod for

mongod for

mongod for

2013/9

2013/10

2013/11
シャーディングのまとめ
•

「わりとビッグ」なデータに対応するための仕組み

 →どのくらいビッグかはハードによるが、期待しすぎは禁物

•

キーの選択がキモ

•

耐障害性はシャーディングと組み合わせて担保
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
ご清聴ありがとうございました。

More Related Content

PPTX
MongoDBが遅いときの切り分け方法
PDF
MongoDBのアレをアレする
PPTX
Mongo dbを知ろう
PPTX
MongoDBの監視
PPTX
がっつりMongoDB事例紹介
PPTX
初心者向けMongoDBのキホン!
PPTX
WiredTigerを詳しく説明
PDF
PostgreSQLの関数属性を知ろう
MongoDBが遅いときの切り分け方法
MongoDBのアレをアレする
Mongo dbを知ろう
MongoDBの監視
がっつりMongoDB事例紹介
初心者向けMongoDBのキホン!
WiredTigerを詳しく説明
PostgreSQLの関数属性を知ろう

What's hot (20)

PDF
PostgreSQL のイケてるテクニック7選
PDF
MongoDB〜その性質と利用場面〜
PDF
MongoDB概要:金融業界でのMongoDB
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
MongoDB Configパラメータ解説
PDF
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
PDF
後悔しないもんごもんごの使い方 〜アプリ編〜
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PDF
Cassandraとh baseの比較して入門するno sql
PDF
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
PDF
Vacuum徹底解説
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
PDF
DBスキーマもバージョン管理したい!
PDF
イミュータブルデータモデル(世代編)
PDF
並列クエリを実行するPostgreSQLのアーキテクチャ
PPTX
Redisの特徴と活用方法について
PDF
MySQLバックアップの基本
PDF
Webアプリを並行開発する際のマイグレーション戦略
PDF
binary log と 2PC と Group Commit
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL のイケてるテクニック7選
MongoDB〜その性質と利用場面〜
MongoDB概要:金融業界でのMongoDB
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
MongoDB Configパラメータ解説
PostgreSQL10を導入!大規模データ分析事例からみるDWHとしてのPostgreSQL活用のポイント
後悔しないもんごもんごの使い方 〜アプリ編〜
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
Cassandraとh baseの比較して入門するno sql
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Vacuum徹底解説
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
DBスキーマもバージョン管理したい!
イミュータブルデータモデル(世代編)
並列クエリを実行するPostgreSQLのアーキテクチャ
Redisの特徴と活用方法について
MySQLバックアップの基本
Webアプリを並行開発する際のマイグレーション戦略
binary log と 2PC と Group Commit
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
Ad

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

PDF
Mongo dbを知ろう devlove関西
PDF
データベース勉強会 In 広島 mongodb
PDF
初めてのMongo db
PDF
レガシーシステムのDBマイグレーションし始めた話
PDF
Htmlコーディングの効率化 前編
PDF
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PPTX
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
PDF
地方企業がソーシャルゲーム開発を成功させるための10のポイント
PDF
MongoDBCSharp
PDF
Casual Compression on MongoDB
PDF
[AWSマイスターシリーズ] Amazon DynamoDB
PDF
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
PPT
20131012 nodejs
PPTX
mrubyで作るマイコンボード
PDF
JavaScriptトレンド総括(2014)
PDF
既存システムへの新技術活用法 ~fluntd/MongoDB~
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
PDF
パネルディスカッション資料(公開版)
PDF
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
PPT
Google Product
Mongo dbを知ろう devlove関西
データベース勉強会 In 広島 mongodb
初めてのMongo db
レガシーシステムのDBマイグレーションし始めた話
Htmlコーディングの効率化 前編
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
BazelでビルドしたアプリをGCPにデプロイしようとしてハマった話
地方企業がソーシャルゲーム開発を成功させるための10のポイント
MongoDBCSharp
Casual Compression on MongoDB
[AWSマイスターシリーズ] Amazon DynamoDB
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
20131012 nodejs
mrubyで作るマイコンボード
JavaScriptトレンド総括(2014)
既存システムへの新技術活用法 ~fluntd/MongoDB~
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜
パネルディスカッション資料(公開版)
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Google Product
Ad

More from Ryuji Tamagawa (20)

PDF
20171012 found IT #9 PySparkの勘所
PDF
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
PPTX
hbstudy 74 Site Reliability Engineering
PDF
PySparkの勘所(20170630 sapporo db analytics showcase)
PDF
20170210 sapporotechbar7
PDF
20161215 python pandas-spark四方山話
PDF
20161004 データ処理のプラットフォームとしてのpythonとpandas 東京
PDF
20160708 データ処理のプラットフォームとしてのpython 札幌
PDF
20160127三木会 RDB経験者のためのspark
PDF
20151205 Japan.R SparkRとParquet
PDF
Performant data processing with PySpark, SparkR and DataFrame API
PDF
Apache Sparkの紹介
PDF
足を地に着け落ち着いて考える
PDF
ヘルシープログラマ・翻訳と実践
PDF
Google Big Query
PDF
BigQueryの課金、節約しませんか
PDF
You might be paying too much for BigQuery
PDF
Google BigQueryについて 紹介と推測
PDF
lessons learned from talking at rakuten technology conference
PDF
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました
20171012 found IT #9 PySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
hbstudy 74 Site Reliability Engineering
PySparkの勘所(20170630 sapporo db analytics showcase)
20170210 sapporotechbar7
20161215 python pandas-spark四方山話
20161004 データ処理のプラットフォームとしてのpythonとpandas 東京
20160708 データ処理のプラットフォームとしてのpython 札幌
20160127三木会 RDB経験者のためのspark
20151205 Japan.R SparkRとParquet
Performant data processing with PySpark, SparkR and DataFrame API
Apache Sparkの紹介
足を地に着け落ち着いて考える
ヘルシープログラマ・翻訳と実践
Google Big Query
BigQueryの課金、節約しませんか
You might be paying too much for BigQuery
Google BigQueryについて 紹介と推測
lessons learned from talking at rakuten technology conference
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました

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