SlideShare a Scribd company logo
15
Most read
17
Most read
20
Most read
Begining MongoDB
初心者向け
MongoDBのキホン!
渡部 徹太郎2014/03/01
OSC2014Tokyo/Spring
Ver 3.0用に
ちょっと修正
2015/7/15
自己紹介
{"ID" :"fetaro"
"名前" :"渡部 徹太郎"
"経歴" :"学生時代は情報検索の研究(@日本データベース学会)"
"仕事" :{"昔":"証券会社のオントレシステムのWeb基盤",
"今":"オープンソース全般"}
"特技":["サーバ基盤","Linux","KVM","ruby","MongoDB"]
"エディタ":"emacs派"
"趣味":"自宅サーバ"
"MongoDB関連":{
-"3年前に、友人の結婚式用のアプリを作った時に利用"
-"技評記事「MongoDBでゆるふわDB体験」"
-"日経SYSTEMS 8月号 「ドキュメント指向データベース」"
}
}
2
NoSQLの位置づけ
• NoSQLはデータベースの中でも、
スキーマレス&ビックデータが得意で、オンライン操作向け
NoSQL
• MongoDB
• Cassandra
• Couchbase
• Redis
• Neo4j
Hadoop
• Apache Hadoop
• Hortonworks
• Cloudera
• MapR
RDBMS
• Oracle
• MySQL
• SQL Server
• PostgreSQL
DWH
• Teradata
• IBM Netezza
• EMC Greenplum
• HP Vertica
オンラインで
データ操作
バッチで
分析・集計
スキーマあり&非ビックデー
タ
スキーマレス & ビックデータ
MongoDBの位置づけ(1/3)
• MongoDBはNoSQLの中のドキュメント指向データベース
44
キーバリュー型
Riak, Redis,
memcached,
KVS
RDBMS
MySQL,PostgreSQL,
Oracle,SQL Server,DB2
列指向
Cassandra,
HBase,
Amazon DynamoDB
キ
ー
列 array
hash
ドキュメント
NOSQL(Not Only SQL)
ドキュメント指向
MongoDB, Couchbase Server
DocumentDB, DynamoDB,
ドキュメント
データベース
キー 値
キー
値
グラフ指向
Neo4j
MongoDBの位置づけ(2/3)
• ドキュメント指向データベースとは
o データを階層構造のドキュメント(≒JSON)で扱う
• JSONとは
o ハッシュと配列をネストして使うことができる
o XMLよりシンプルに表現できる。読みやすく直観的
o ネストが深くなる場合に、より効率的に扱える。
• JSONの例
5
{
ID : 12345 ,
name :"渡部”,
address : {
Company :"日本”,
City :"東京”,
ZipNo :"045-3356”,
}
friendID : [ 3134 , 10231 , 10974 , 11165 ] ,
hobbies :
[
{ name :"自宅サーバ","year": 6 } ,
{ name :"プログラミング","year": 10 } ,
{ name :"麻雀","no": 16 } ] }
配列
ハッシュの配列
キーと値
ハッシュ
MongoDBの位置づけ(3/3)
6
 ドキュメント指向データベースの比較
MongoDB CouchDB Couchbase Server
データ構造 データベース
└コレクション
└ドキュメント
データベース
└ドキュメント
バケット
└ドキュメント
インデックスの
生成
インデックスを張りたいキーを指定
する
MapReduce関数を用いたビューを作成することで対
応
クエリー 動的クエリ。SQLライクな記述が
可能。
基本的なCRUD以外は、静的クエリ。上記
MapReduceで作成したビューへのアクセスがクエリ
にあたる。
主なインター
フェース
独自プロトコル。各言語用専用ドラ
イバを利用。
REST(HTTP) memcachedプロトコル
レプリケーショ
ン
シングルマスタ型レプリケーション
(1ノードにしか書き込めない)
マルチマスタ型レプリケーション
(複数ノードに書き込める)
開発言語 C++ Erlang C,C++,Erlang
MongoDBの特徴(1/8)
• MongoDBを一言でいうと
o RDBMSとKVSの中間
o MongoDBの特徴
7
水平分散 スキーマレス
多機能
リッチなデータ
レプリケーション 使いやすい柔軟なクエリ
KVSと
比較して
RDBMSと
比較して
MongoDBならでは
機能数
スケーラビリティ
水平分散能力
KVS
RDBMS
MongoDB
水平分散できて、
機能も多い
MongoDBの特徴(2/8)
• .
o JSON(階層型データ)は、Key-Valueに比べて、リッチなデータモ
デル
o このようにKey-Valueで1対多を表現しようとすると、key名に"-
1"等の配列の番号を持たせなければならず非常に扱いにくい。
8
リッチなデータ
key value
id 10
10-name "watanabe"
10-friendId-0 4
10-friendId-1 7
10-friendId-2 12
10-friendId-3 19
{
id: 10
name: "watanabe"
friendId : [4, 7, 12, 19]
}
JSON Key-Value
MongoDBの特徴(3/8)
• .
o 表現力豊かなクエリ
 SQLの文法に似せたクエリが扱いやすい。
 動的に作成可能。事前に定義不要。
 単純な条件検索だけでなく、集計等の高度なクエリも書ける。
o RDBMS以上に強力なインデックス
 セカンダリインデックス:主キー以外でインデックスを作成可能
 複合キーインデックス:複数のキーでインデックスを作成可能
 マルチキーインデックス:配列の要素に対してインデックス作成可
能
9
db.person.find( {"name":"watanabe","age": 30 } ).limit(3)
例)コレクションpersonに、“name”が“watanabe”で、
“age”が30のドキュメントを3つだけ取得したい
柔軟なクエリ
MongoDBの特徴(4/8)
• .
o 水平分散(シャーディング)が簡単
 キーによってデータをノードに分散することができる。また、
ノードを動的に追加し、データの自動バランシング機能もあ
る。
10
範囲 0-9 範囲10-19 範囲20-
x ドキュメント
チャン
ク
アプリケーション
mongosルータ
1 4 9 11 16 20 27
MongoDB
ドライバ
23
23 クエリを適切な
ノードに分散
シャードキーで
分散
ノード ノード ノード
シャードキー
水平分散
ドキュメント
MongoDBの特徴(5/8)
•
o 複製(レプリケーション)が簡単
 簡単なコマンドで、レプリケーションを構築可能。
 シャーディングと組み合わせることも可能
 MongoDBドライバが自動的に書き込み先を切り替えるため、仮想IPなどを
用意しなくてもフェイルオーバが可能(≒クラスタソフトウェアが不要)
11
アプリケーション
プライマリ
1 4 9
セカンダリ
1 4 9
セカンダリ
1 4
MongoDBドライバ
9
書き込み
レプリカセット
読み込み
データ複
製
読み込み
書き込めるのは
マスタのみ
読み込みは負
荷分散可能
プライマリ
1 4 9
プライマリ
1 4 9
セカンダリ
1 4 9データ複
製
アプリケーション
MongoDBドライバ
書き込み 読み込み読み込み
プライマリが障
害になったら、
プライマリノード
を選出し、自動
フェイルオーバ
レプリカセット
レプリケーション
MongoDBの特徴(6/8)
o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
12
マシン2
マシン3
マシン1プライマリ
データ1
セカンダリ
データ1
セカンダリ
データ1
レプリカセット
セカンダリ
データ2
プライマリ
データ2
セカンダリ
データ2
レプリカセッ
ト
セカンダリ
データ3
セカンダリ
データ3
プライマリ
データ3
レプリカセット
mongosルータ
負荷分散
冗
長
化
アプリケーション
MongoDBの特徴(6/8)
o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
13
マシン2
マシン3
マシン1プライマリ
データ1
セカンダリ
データ1
セカンダリ
データ1
レプリカセット
セカンダリ
データ2
プライマリ
データ2
セカンダリ
データ2
レプリカセッ
ト
セカンダリ
データ3
セカンダリ
データ3
プライマリ
データ3
レプリカセット
mongosルータ
アプリケーション
MongoDBの特徴(7/8)
•
o スキーマレスデータを扱える
o テーブル定義など無しに、すぐにデータをCRUDできる
•
o セットアップが非常に簡単
 OS毎にバイナリがあるため、ライブラリの追加インストール不要。
 起動までわずか3ステップ。
• OS毎のバイナリをダウンロード
• データディレクトリを作成
• 起動
o RDBMSを使っていた人が使いやすいように作られている
 データベース>テーブル(コレクション)>ドキュメント というデータ構造
 SQLとMongoクエリ言語は大部分マッピング可能
 インデックスもSQLと同じような宣言ができる
o 豊富なドキュメント・ノウハウ
 英語ではあるが公式ドキュメントは他のNOSQLに比べても豊富
 多くの人が使っているため、ノウハウが豊富。日本語のノウハウも多い。
14
使いやすい
スキーマレス
MongoDBの特徴(8/8)
•
15
機能 説明 ユースケース
機能 GridFS 大容量ファイル(16M以上)を扱うことができる。
大容量ファイルをドキュメントに分割して格納し、
アプリケーションには等価的なAPIを提供。
大容量ファイルの管理
地理空間インデック
ス
2Dや3Dのデータを格納し、それに対して交点や
近傍などの検索をかけることができる。
アプリでのつくり込み不要。
地図アプリのデータベース
キャップ付きコレクショ
ン・TTLインデクス
期限やサイズを指定したコレクションを作り、自動
的に古いドキュメントを引き落とせる
ログ保管
集計機能 SQLのグループ関数のように集計できる。
また集計関数をパイプラインでつなぐこともできる
データの集計
対障
害
ジャーナリング 単一ドキュメントに対して、書き込みの一貫性が
保持できる。
突然の電源停止等に対応し
たい
運用
性
各種統計コマンド 様々なサーバの統計情報を取得するツールや、
JSON形式で出力するコマンドがある
運用監視ツールとの連携
障害対応効率化
MMS (MongoDB
Management
Service)
MongoDBの監視、アラート、自動バックアップ、
ポイントインタイムリカバリ、自動バージョンアップ
ができるクラウドサービス。
運用監視の仕組みを簡単に
作りたい
多機能
MongoDB
GridFS API
GridFSのイメージ
db.map.find({loc:{$near:[ 139.701238, 35.658871 ]}})
大容量ファイル 地理空間インデックスを使ったデータに対するクエリ
$nearにより、座標に近
い点を検索
MongoDB 2.xとMongoDB 3.0の違い
• アプリケーションからのインターフェースは変更なし
• 大きな変更点はストレージエンジン(データ永続化部分)。
MongoDB 3.0では新しいWiredTigerと古いmmapベース
が選択可能。
MongoDB 2.x MongoDB 3.0
ストレージエンジン
(データ永続化部分)
mmapベース
(=OSまかせ)
mmapベース
(=OSまかせ)
WiredTiger
ロックの粒度 データベース単位 コレクション単位 ドキュメント単位
データ圧縮 × ○
snappyとzlibを選択可
データとインデックスの分
離
× ○
メモリ使用量制限 ×
OSから与えられるだけ使う
○
肥大化するドキュメントの
扱い
×
ドキュメントが肥大化する
と、物理的な移動が必要
△
アルゴリズムの変更によ
り、以前ほど発生しなく
なった
○
肥大化しても移動は発生
しない
使ってみよう
• コマンドメモ
# インストール
# ダウンロードページ
http://www.mongodb.org/downloads
wget https://fastdl.mongodb.org/linux/mongodb-linux-
x86_64-3.0.4.tgz
tar zxvf mongodb-linux-x86_64-3.0.4.tgz
# 起動
cd mongodb-linux-x86_64-3.0.4.tgz
mkdir data
./bin/mongod --dbpath=data --nojournal
# MongoDBへ接続
# 別のターミナルを上げて、mongo shellで接続
./bin/mongo
# 基本的なCRUD
use mydb
db.mycol.insert({"key1":"value1"})
db.mycol.insert({"key2":"value2"})
db.mycol.find()
db.mycol.find({"key1":"value1"})
db.mycol.update({"key1":"value1"},{"key1":"value-hoge"})
db.mycol.remove({"key1":"value1"})
db.mycol.remove()
# 少し実践的なデータで試してみる
db.profile.insert(
{
"name" : "watanabe",
"skill" : ["MongoDB","KVM","ruby"],
"job":{
"before" : "Online Trade System",
"now" : "Open Source"
},
"editor":"emacs"
}
)
db.profile.insert(
{
"name" : "ogasawara",
"skill" : ["MongoDB","LibreOffice","Printing"],
"editor":"vim"
}
)
db.profile.insert(
kubota = {
"name" : "kubota",
"skill" : ["MongoDB","MySQL","PostgreSQL","ruby","c++","java","Web"],
"editor":"emacs",
"keybord":"kinesis"
}
)
db.profile.find({"skill":"MongoDB"},{"name":1})
db.profile.find({"skill":"KVM"},{"name":1})
watanabe = db.profile.findOne({"name":"watanabe"})
watanabe["job"]
17
プログラミング言語から使う場合
• mongoshellと同じ使い勝手です
• rubyの例
18
MongoDBを使う上での注意点
• トランザクションが無い
o MongoDBが複数のドキュメントを一貫性をもって更新する事ができな
い
o ミッションクリティカルで複数のテーブルの更新を保証しなければな
らないようなシステムでは、利用してはならない。
• 外部キー・結合が無い
o 他のドキュメントへの参照はアプリケーションで実装する必要がある。
o 当然ながら、外部キー制約もないため、テーブル間の整合性が重要な
システムには向いていない。
o 複数のドキュメントの内容を結合して取得することはできない。
• スキーマが無い
o どのようなキー名でデータが入っているかわからない。データ型もわ
からない。
o データ登録間違えの際にエラーが発生しない。
o 設計書を厳格に管理しないと、どのようなデータが入っているかわか
らなくなり、保守性の低下を招く恐れがある。
19
MongoDBの使いどころ
• 使いどころ、ユースケースしては「がっつりMongoDB事例紹介」の方を参
照ください。
• http://www.slideshare.net/tetsutarowatanabe/mongodb-32964238
20
MongoDB JP ”日本MongoDBユーザ会”
• ホームページ
o MongoDB JP. http://www.mongodb.jp/mongo/main
• メーリングリスト
o google group 名「MongoDB JP」
o https://groups.google.com/forum/#!forum/mongodb-jp
21

More Related Content

PDF
マルチテナント化で知っておきたいデータベースのこと
PPTX
強化学習における好奇心
PDF
ソーシャルゲームのためのデータベース設計
PPTX
スタートアップの 3 分ピッチテンプレート
PDF
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
PDF
スタートアップを始める前に
PDF
Docker Compose 徹底解説
PDF
マイクロサービス 4つの分割アプローチ
マルチテナント化で知っておきたいデータベースのこと
強化学習における好奇心
ソーシャルゲームのためのデータベース設計
スタートアップの 3 分ピッチテンプレート
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
スタートアップを始める前に
Docker Compose 徹底解説
マイクロサービス 4つの分割アプローチ

What's hot (20)

PPTX
がっつりMongoDB事例紹介
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
PostgreSQLアンチパターン
PDF
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
PDF
MongoDB〜その性質と利用場面〜
PPTX
MongoDBの監視
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
PPTX
Redisの特徴と活用方法について
PPTX
はじめてのElasticsearchクラスタ
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
PDF
SolrとElasticsearchを比べてみよう
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
PDF
イミュータブルデータモデルの極意
PDF
目grep入門 +解説
PDF
PlaySQLAlchemy: SQLAlchemy入門
PDF
DBスキーマもバージョン管理したい!
PDF
TLS, HTTP/2演習
がっつりMongoDB事例紹介
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PostgreSQLアンチパターン
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
MongoDB〜その性質と利用場面〜
MongoDBの監視
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
Redisの特徴と活用方法について
はじめてのElasticsearchクラスタ
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
20190806 AWS Black Belt Online Seminar AWS Glue
SolrとElasticsearchを比べてみよう
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
アーキテクチャから理解するPostgreSQLのレプリケーション
イミュータブルデータモデルの極意
目grep入門 +解説
PlaySQLAlchemy: SQLAlchemy入門
DBスキーマもバージョン管理したい!
TLS, HTTP/2演習
Ad

Similar to 初心者向けMongoDBのキホン! (20)

PPTX
MongoDB World 2014に行ってきた!
PPT
mongoDB: OSC Tokyo2010 spring
ODP
Mongo db勉強会
PDF
既存システムへの新技術活用法 ~fluntd/MongoDB~
KEY
Osc2012.dbに行ってきました
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PDF
LambdaとMobileの美味しいかもしれない関係
PDF
Node.js Tutorial at Hiroshima
PDF
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
PPTX
The seminar of asp.net at 201908 sakurug
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
PDF
AWS re:Invent2017で見た AWSの強さとは
PDF
クラウド開発に役立つ OSS あれこれ
PDF
Docomo Cloud Package
PPTX
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
PDF
Couch DB in 15minutes
PDF
データベース勉強会 In 広島 mongodb
PPTX
Windows azureって何
PDF
MongoDBざっくり解説
MongoDB World 2014に行ってきた!
mongoDB: OSC Tokyo2010 spring
Mongo db勉強会
既存システムへの新技術活用法 ~fluntd/MongoDB~
Osc2012.dbに行ってきました
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
LambdaとMobileの美味しいかもしれない関係
Node.js Tutorial at Hiroshima
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
The seminar of asp.net at 201908 sakurug
Node.jsアプリの開発をモダン化するために取り組んできたこと
AWS re:Invent2017で見た AWSの強さとは
クラウド開発に役立つ OSS あれこれ
Docomo Cloud Package
データベースアプリケーション開発セミナー・最新のデータベースとアプリケーション開発の関係
Couch DB in 15minutes
データベース勉強会 In 広島 mongodb
Windows azureって何
MongoDBざっくり解説
Ad

More from Tetsutaro Watanabe (20)

PPTX
データサイエンティスト向け性能問題対応の基礎
PPTX
MLOpsはバズワード
PPTX
ドライブレコーダの動画を使った道路情報の自動差分抽出
PPTX
IoTデバイスデータ収集の難しい点
PPTX
ドライブレコーダの画像認識による道路情報の自動差分抽出
PPTX
先駆者に学ぶ MLOpsの実際
PPTX
データ収集の基本と「JapanTaxi」アプリにおける実践例
PPTX
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
PPTX
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
PPTX
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
PPTX
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
PPTX
ビッグデータ処理データベースの全体像と使い分け
2018年version
PPTX
Google Cloud Next '18 Recap/報告会 機械学習関連
PPTX
巨大なサービスと膨大なデータを支えるプラットフォーム

PPTX
リクルートを支える横断データ基盤と機械学習の適用事例
PPTX
WiredTigerを詳しく説明
PPTX
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
PPTX
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
PPTX
ビックデータ処理技術の全体像とリクルートでの使い分け
PPTX
MongoDBが遅いときの切り分け方法
データサイエンティスト向け性能問題対応の基礎
MLOpsはバズワード
ドライブレコーダの動画を使った道路情報の自動差分抽出
IoTデバイスデータ収集の難しい点
ドライブレコーダの画像認識による道路情報の自動差分抽出
先駆者に学ぶ MLOpsの実際
データ収集の基本と「JapanTaxi」アプリにおける実践例
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
JapanTaxiにおけるSagemaker+αによる機械学習アプリケーションの本番運用
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
ビッグデータ処理データベースの全体像と使い分け
2018年version
Google Cloud Next '18 Recap/報告会 機械学習関連
巨大なサービスと膨大なデータを支えるプラットフォーム

リクルートを支える横断データ基盤と機械学習の適用事例
WiredTigerを詳しく説明
ビッグデータ処理データベースの全体像と使い分け - 2017年 Version -
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
ビックデータ処理技術の全体像とリクルートでの使い分け
MongoDBが遅いときの切り分け方法

初心者向けMongoDBのキホン!