SlideShare a Scribd company logo
MongoDBを知ろう 
@DevLove関西 2014/10/20 
玉川竜司
自己紹介 
• 玉川竜司 
• FB: Ryuji Tamagawa 
• Twitter: @tamagawa_ryuji 
• 本業ソフト開発(Sky株式会社) 
• 兼業翻訳者(ほぼオライリー)
What’s New & Next
今日のお題は 
MongoDB
話の流れ 
• NoSQLってなんだろう 
• MongoDBの概要 
• MongoDBのユースケース 
• MongoDBの特徴
NoSQLってなんだろう
NoSQLムーブメント 
• Not Only SQL : SQL(RDB)以外の選択肢 
• 2010年前後のビッグデータブームの立ち上がりとともに 
注目を集め始めた技術/データベース/バズワード/… 
• 特徴を一言で言うなら、RDBの特徴(の一部)を捨てる 
ことで「データの量に対するスケーラビリティ」を大幅 
に向上させたもの
RDBが抱えている(いた)課題 
• データの量に対してスケーラビリティが低い 
• 大きな要因は、ストレージのランダムI/Oの低速 
性、テーブルの結合処理のコスト、ACID属性 
• ただしこれらは、実はRDBの長所の裏返しで 
もある 
• 商用DBは、一般にスケールアウトのオプション 
が非常に高価 
https://www.youtube.com/watch?v=9eMWG3fwiEU
シンプルなNoSQL 
• 基本的には、主キーだけをインデックスとして持つフラットな(分 
散)ストレージ 
• ACID属性?何それ美味しいの? 
• アプリケーション側から見ると、 
単純なインデックスで高速にアクセスできる、スケーラビリティの 
高い永続化層
もう少し高機能なNoSQL 
• ドキュメント(JSON)ストレージへの進化 
• セカンダリインデックス 
• MongoDBやCouchBaseが代表選手
RDBとNoSQL:得意な領域 
データの量 
RDBが 
得意な領域 
どうやっても 
難しい領域 
NoSQLが 
得意な領域 
なんでもOKな 
領域 
データモデルの厳密性
RDBとNoSQL:デバイスの進化の影響 
データの量 
RDBが 
得意な領域 
NoSQLが 
得意な領域 
なんでもOKな 
データモデルの厳密性 
領域 
どうやっ 
ても 
難しい領域 
メモリ容量の増大と 
SSDの普及
RDBとNoSQL:トレードオフ 
• データ量の増大に伴って、単純な2択ではすまなくなることがでてきた 
• ストレージ層を選択する上で、データモデル、スケーラビリティ、動作 
環境、運用コスト、開発工数などを考慮しなければならない 
ファイルシステムRDB 
ファイルシステム単純なNoSQL 高機能なNoSQL RDB
RDBとNoSQL 
• RDBの重要性に変わりはない。技術として、しっかり持っておくべきもの 
• その上で、状況によってはNoSQLを使ったほうがいい場合を判断する 
• 一般に、RDBに比べてNoSQLでの開発は、アプリケーション側のロジッ 
クの複雑化を招くことには注意 
• そして、RDBに比べれば、NoSQLははるかに多種多様であり、1つのカ 
テゴリにくくること自体に無理がある。技術者の知識とセンスが問われる
MongoDBの概要
MongoDBのいいところ 
• 一言で言うなら「お手軽」 - いい意味で 
• Webアプリケーションで求められる機能が手っ取り早く使える 
• 多目的の高性能「オートマ車」 
• インストーラやパッケージですぐ動きます 
• セカンダリインデックスやクエリオプティマイザがある 
• 多くの言語で、仕様がある程度統一されているドライバが利用可能
MEANスタック 
• JSONでバックエンドからフロント 
エンドまで統一 
• MongoDB、Express、 
AngularJS、Node.js 
• 英語の本はたくさん出てます
エコシステムの形成 
• 世界的に見れば、NoSQLデータベースとしては最もメジャーな存在になっ 
てきた → 周辺が充実してきている 
• クラウド上で実績多数。MongoHQなど、as a serviceでも提供されてい 
る 
• GUIツールも増えてきました 
• MMS(http://www.mongodb.com/mongodb-management-service) 
- バックアップ、運用管理などを行ってくれる本家のクラウドサービス
ただし 
• 集計は(今のところ)ちょっと苦手 - とはいえ改善中 
• (ほんとの)ビッグデータはちょっと難しいかも 
• 基本的に、オンメモリでいけるかどうかが問題 
• そういえば、でかいメモリのインスタンス、AWSでもAzureで 
もさくらでも増えましたね・・・
MongoDBのユースケース
openstandia.jp
MongoDBの特徴
RDBとの違い 
• 物理構造の違い 
• 論理構造の違い 
• トレードオフの柔軟性 
• レプリカセット 
• シャーディング
物理構造の違い 
RDB MongoDB 
物理メモリ物理メモリ 
DBエンジンが管理する 
メモリバッファ 
サイズを 
指定できる 
データファイル 
メモリにマップされた 
ファイルの内容 
サイズを 
指定できない 
データファイル 
(メモリマップドファイル)
物理構造の違い(2) 
• とにかく、「ホット」なデータが物理メモリに収まるかが肝心 
• RDBほど細かなメモリのチューニングはできない 
• データが大きいなら、RAMを増やすか、シャーディングでスケール 
アウト
論理構造の違い 
RDB MongoDB 
{ 
_id: new ObjectId(""), 
slug: "gardening-tools", 
ancestors: 
[{ name: "Home", 
_id: new ObjectId(""), 
slug: "home" }, 
{ name: "Outdoors", 
_id: new ObjectId(“"), 
slug: "outdoors" 
} ], 
}
論理構造の違い(2) 
• スキーマの自由度は高い(特に変更に強い) 
• ドキュメントを超えたアトミック性はない 
• 設計上のトレードオフが生じる 
• 一つのドキュメントで閉じない場合はIDで参照 
• そうなると、処理をプログラムで書く必要が出てくる
トレードオフの柔軟性 
RDB MongoDB 
書いたら 
必ず 
永続化 
書き込み結果は 
必ず確認 
書き込み保証 
する?しない? 
しなけりゃ高速 
WAL使う? 
いくつのレプリ 
カへ書けたら成功 
したことにする?
トレードオフの柔軟性(2) 
• 書き込みの確実性とパフォーマンスはトレードオフ 
• 大量のログの記録などでは、多少こぼれるリスクを抱えてもコストダウ 
ンしたいこともある 
• 逆に、データセンター間で複製できていることを保証したいこともある 
• 書き込み保証(Write Concern)、WAL、レプリカへの書き込み、タ 
ギングなどで、多彩な調整が可能
レプリカセットとシャーディングについて 
• これらについては、「技術的には」RDBとの対立概念ではない 
• ただし、商用RDBではコストが跳ね上がる(ですよね?)機能 
• MongoDBでは最初から組み込まれて、非常にお手軽 & 便利 
• 大まかには 
• 読み込みのパフォーマンスと耐障害性を向上させるのがレプリカセット 
• 書き込みのパフォーマンスを向上させるのがシャーディング
レプリカセット 
Repreca-Master 
Client-App 
Driver 
Repreca-Slave 
Repreca-Slave 
書込 
複製 
読取 
oploogplog 
oplog 
oplog
oplogについて 
• Capped Collection : 追記のみ、古いデー 
タが自動的に削除される 
• oplog : データベースの更新処理を時系 
列で記録するcapped collection 
• プライマリのoplogをセカンダリのoplog 
が追いかけることでレプリケーションを 
行う 
Primary 
Secondary 
Secondary
レプリカセット 
Repreca-Master 
Client-App 
Driver 
Repreca-Slave 
Repreca-Slave 
書込 
複製 
読取 
oploogplog 
oplog 
oplog
レプリカセット(マスター交代) 
Repreca-Master 
Repreca-Master 
Repreca-Slave 
書込 
複製 
Client-App 
Driver 
読取 
oploogplog 
opolopglog 
oploogplog
障害発生時のoplog 
• 交代したプライマリと生きているセ 
カンダリのoplogは先へ進んでいく 
• 停止中の元プライマリのoplogはも 
ちろん止まったまま 
元Primary 
(停止中) 
現Primary 
Secondary
レプリカセット(リカバリ中) 
Repreca-Slave 
(リカバリ中) 
Repreca-Master 
Repreca-Slave 
書込 
複製 
Client-App 
Driver 
読取 
追いつくまで複製 
もしくはフルコピー 
opolopglog 
opolopglog
障害回復時のoplog(1) 
• 回復したセカンダリが、現プラ 
イマリのoplogを見て追いつい 
ていく 
Secondary 
現Primary 
Secondary
障害回復時のoplog(2) 
• 障害が長く続き、現プライマリの 
oplogと回復したセカンダリのoplog 
がオーバーラップしなくなってしまっ 
た場合 
• 仕方ないので自動的にfull syncに移 
行する 
• こうなると時間も負荷もかかるので、 
oplogの期間設定やファイルベースの 
バックアップ間隔は重要 
Secondary 
現Primary 
Secondary
レプリカセット(リカバリ後) 
Repreca-Slave 
Repreca-Master 
Repreca-Slave 
書込 
複製 
Client-App 
Driver 
読取 
複製oopplologg 
opolpolgog 
opolpolgog
レプリカセット(バックアップのコストダウン) 
Repreca-Master 
(インデックスあり) 
Client-App 
Driver 
Repreca-Slave 
(インデックスあり) 
Repreca-Slave 
(バックアップ) 
書込 
複製 
読取 
バックアップ用のインスタン 
スにはインデックスを付けず、 
非力なマシンで済ませる
レプリカセット 
(誤操作、バグ対策) 
Repreca-Master 
(インデックスあり) 
Client-App 
Driver 
Repreca-Slave 
(インデックスあり) 
指定した時間遅らせて複製。 
誤操作によるデータ消去 
などの対策 
Repreca-Slave 
(バックアップ) 
書込 
複製 
読取 
Repreca-Slave 
(delayed)
レプリカセット(DC間での分散) 
Repreca-Master 
複製 
Client-App 
Driver 
Repreca-Slave 
Repreca-Slave 
書込 
読取 
DC-1 DC-2
レプリカセットのまとめ 
• 読み取り負荷の分散 
• 耐障害性 
• 自動フェイルオーバー & リカバリ 
• 多彩なトレードオフ
シャーディング 
• 書き込み負荷を1/nに 
• メモリ量をn倍に 
• パフォーマンスは上がる 
•障害は起きやすくなる 
→レプリカセットと併用 
Client-App 
Driver 
mongos 
mongod for 
あかさたな 
mongod for 
はまやらわ
改善継続中 - 2.6以降について少し 
• 最新バージョンは2.6系 
• aggregation framework - サイズの制約の緩和 
• Write protocolの改善 - レイテンシの低減 
• Index Intersection - 複数インデクスの同時活用のはず… 
• 2.8/3.0はかなり大規模なアップデートになる模様
まとめ
今日話したこと 
• 運用についてはドキュメントをきっちり読見ましょう 
• この本に基本は書かれています。概要把握にどうぞ。 
• 電子書籍もあります。 
• http://www.oreilly.co.jp/books/ 
9784873115900/ 
• そのほかにもMongoDB関連の電子書籍があるの 
で、オライリージャパンのサイトで検索を。
それはともかく 
• 簡単に始められて 
• かなり深く使うこともできます 
• ただし落とし穴もあります 
→コミュニティへどうぞ! http://www.mongodb.jp 
• まずは手を動かしてみましょう! 
• レプリカセットをお手軽に試せます: 
• https://bitbucket.org/tamagawa_ryuji/mongodb_replicaset_playground_on_vagrant
ご清聴ありがとうございました。

More Related Content

PDF
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
PDF
Postgre sqlから見るnosql
PDF
OSC北海道2014_JPUG資料
PDF
すぐ始めれるクラウド
PDF
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
PDF
実務で役立つデータベースの活用法
PDF
Oss x user_meeting_6_postgres
PDF
PostgreSQLの冗長化について
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
Postgre sqlから見るnosql
OSC北海道2014_JPUG資料
すぐ始めれるクラウド
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
実務で役立つデータベースの活用法
Oss x user_meeting_6_postgres
PostgreSQLの冗長化について

What's hot (20)

PDF
Web エンジニアが postgre sql を選ぶ 3 つの理由
PDF
今すぐ使えるクラウドとPostgreSQL
PDF
Osh2014
PDF
便利なHerokuと active recordの 速度改善tips
PDF
DDDハンズオン
PDF
NoSQLデータベースと位置情報
PDF
中国地方Db勉強会
PDF
知って得するWebで便利なpostgre sqlの3つの機能
ODP
Mongo db勉強会
PPTX
MongoDBが遅いときの切り分け方法
PDF
初めてのMongo db
PPTX
Mongo dbを知ろう
PDF
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
PDF
データベース技術の羅針盤
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
PDF
[Postgre sql9.4新機能]レプリケーション・スロットの活用
PDF
PHPからJavaへ乗り換えた。そんな昔話をしよう
PPTX
20151205 中国地方db勉強会 dbm_fs
ODP
Mongo dbを半年ちょっと運用してみた
PPTX
Mongo db勉強会の補足
Web エンジニアが postgre sql を選ぶ 3 つの理由
今すぐ使えるクラウドとPostgreSQL
Osh2014
便利なHerokuと active recordの 速度改善tips
DDDハンズオン
NoSQLデータベースと位置情報
中国地方Db勉強会
知って得するWebで便利なpostgre sqlの3つの機能
Mongo db勉強会
MongoDBが遅いときの切り分け方法
初めてのMongo db
Mongo dbを知ろう
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
データベース技術の羅針盤
PHPで大規模ブラウザゲームを開発してわかったこと
[Postgre sql9.4新機能]レプリケーション・スロットの活用
PHPからJavaへ乗り換えた。そんな昔話をしよう
20151205 中国地方db勉強会 dbm_fs
Mongo dbを半年ちょっと運用してみた
Mongo db勉強会の補足
Ad

Viewers also liked (20)

PDF
lessons learned from talking at rakuten technology conference
PDF
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました
PDF
ヘルシープログラマ・翻訳と実践
PDF
Advanced MongoDB #1
PDF
Google Big Query
PDF
20161215 python pandas-spark四方山話
PDF
You might be paying too much for BigQuery
PDF
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
PDF
Google BigQueryについて 紹介と推測
PPTX
日本語:Mongo dbに於けるシャーディングについて
PPTX
MongoDB on EC2 #mongodbcasual
KEY
カジュアルにソースコードリーディング
PDF
CasualなMongoDBのサービス運用Tips
PDF
Performant data processing with PySpark, SparkR and DataFrame API
PDF
Casual Compression on MongoDB
PDF
MongoDBではじめるカジュアルなタイムラインシステム
PDF
カジュアルにMongo dbのbackup機能説明
PDF
Seleniumをもっと知るための本の話
PDF
20151205 Japan.R SparkRとParquet
PDF
20170210 sapporotechbar7
lessons learned from talking at rakuten technology conference
丸の内MongoDB勉強会#20LT 2.8のストレージエンジン動かしてみました
ヘルシープログラマ・翻訳と実践
Advanced MongoDB #1
Google Big Query
20161215 python pandas-spark四方山話
You might be paying too much for BigQuery
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
Google BigQueryについて 紹介と推測
日本語:Mongo dbに於けるシャーディングについて
MongoDB on EC2 #mongodbcasual
カジュアルにソースコードリーディング
CasualなMongoDBのサービス運用Tips
Performant data processing with PySpark, SparkR and DataFrame API
Casual Compression on MongoDB
MongoDBではじめるカジュアルなタイムラインシステム
カジュアルにMongo dbのbackup機能説明
Seleniumをもっと知るための本の話
20151205 Japan.R SparkRとParquet
20170210 sapporotechbar7
Ad

Similar to Mongo dbを知ろう devlove関西 (20)

PDF
データベース勉強会 In 広島 mongodb
PDF
DB tech showcase: 噂のMongoDBその用途は?
PDF
About NoSQL
PDF
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
PDF
MySQL Technology Cafe No3
PPTX
初心者向けMongoDBのキホン!
PPTX
比べてみよう リレーショナル vs ドキュメント.pptx
PPT
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
DOC
20110301 Mongo Tokyo
DOC
20110302 Mongo Tokyo
PDF
RDBってなに?
PPT
Cassandra(no sql)によるシステム提案と開発
PDF
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
PPT
Mongodb
PDF
MySQL Cluster 新機能解説 7.5 and beyond
PDF
MongoDBざっくり解説
PDF
Introduction to MongoDB
PDF
20120831 mongoid
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
データベース勉強会 In 広島 mongodb
DB tech showcase: 噂のMongoDBその用途は?
About NoSQL
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
MySQL Technology Cafe No3
初心者向けMongoDBのキホン!
比べてみよう リレーショナル vs ドキュメント.pptx
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
20110301 Mongo Tokyo
20110302 Mongo Tokyo
RDBってなに?
Cassandra(no sql)によるシステム提案と開発
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
Mongodb
MySQL Cluster 新機能解説 7.5 and beyond
MongoDBざっくり解説
Introduction to MongoDB
20120831 mongoid
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ

More from Ryuji Tamagawa (16)

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
20161004 データ処理のプラットフォームとしてのpythonとpandas 東京
PDF
20160708 データ処理のプラットフォームとしてのpython 札幌
PDF
20160127三木会 RDB経験者のためのspark
PDF
Apache Sparkの紹介
PDF
足を地に着け落ち着いて考える
PDF
BigQueryの課金、節約しませんか
PDF
Invitation to mongo db @ Rakuten TechTalk
PDF
MongoDB tuning on AWS
PDF
初めてのAws elastic map reduce
PDF
初めてのAws rds for sql server
PDF
MongoDB on AWS
KEY
Jenkins+ec2 aws勉強会東京9
20171012 found IT #9 PySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
hbstudy 74 Site Reliability Engineering
PySparkの勘所(20170630 sapporo db analytics showcase)
20161004 データ処理のプラットフォームとしてのpythonとpandas 東京
20160708 データ処理のプラットフォームとしてのpython 札幌
20160127三木会 RDB経験者のためのspark
Apache Sparkの紹介
足を地に着け落ち着いて考える
BigQueryの課金、節約しませんか
Invitation to mongo db @ Rakuten TechTalk
MongoDB tuning on AWS
初めてのAws elastic map reduce
初めてのAws rds for sql server
MongoDB on AWS
Jenkins+ec2 aws勉強会東京9

Mongo dbを知ろう devlove関西