SlideShare a Scribd company logo
1 of 52
Download to read offline
OSC 2014 Kansai@Kyoto
MongoDB
基本の基本
2014.08.02
MongoDB 日本ユーザー会
MongoDB JP
小笠原徳彦
(OGASAWARA, Naruhiko)
OSC 2014 Kansai@Kyoto 2/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 3/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 4/52
MongoDB JP とは
MongoDB を使ってる!使いたい!興味ある!人たち
の集まり
公式サイト: http://www.mongodb.jp/
Google Groups:
https://groups.google.com/forum/#!forum/mongodb-jp
Facebook Page:
https://www.facebook.com/MongodbJp
丸の内 MongoDB 勉強会 #mongonouchi
http://syokenz.github.io/marunouchi-mongodb/
OSC 2014 Kansai@Kyoto 5/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 6/52
MongoDB とは
MongoDB Inc. が中心になって開発している NoSQL
データベース
MongoDB http://www.mongodb.org/
MongoDB Inc. http://www.mongodb.com/
ライセンスは AGPLv3
SQL のような DDL は存在しない
言語ごとに異なる「ドライバー」を経由してアクセス
C 、 C++ 、 Ruby 、 Perl 、 Python 、 Java 、 JavaScript 、
Scala 、 Haskell 、……
OSC 2014 Kansai@Kyoto 7/52
RDBMS と NoSQL(1)
RDBMS (Relational Database Management System)
関係モデルに基づいたデータベース管理システム
SQL (Standard Query Language) による宣言的な操作
オプティマイザにより「どうデータを格納し」「どうデータを得
る」かは最適化されて高速に実行される
アトミックなデータ操作
データの一貫性保持が重要
OSC 2014 Kansai@Kyoto 8/52
RDBMS と NoSQL(2)
しかしクラウド時代においては、データの一貫性保
持はコストが高い……こともある
一貫性保持は常に必要なのか?
例: EC サイトの在庫状況はリアルタイムでなくてもよい
決済時に一貫性が担保されていればよい
一貫性の完全な保持を諦めれば水平にスケールできる
DB
App
Tokyo
US App
EU App EU AppDB
US AppDB
Tokyo AppDB
OSC 2014 Kansai@Kyoto 9/52
RDBMS と NoSQL(3)
クラウドに必要な要件を持つストレージエンジンを
RDBMS と使いわける
シンプルな機能
高速
スケーラブル
Not Only SQL = NoSQL (SQL に NO! ではない )
Key Value Store (KVS) Apache Cassandra, Tokyo Cabinet,
Rakuten ROMA, Redis, Riak
グラフ指向 DB Neo4j, HyperGraphDB
列指向 DB Apache HBase
ドキュメント指向 DB CouchDB, MongoDB
OSC 2014 Kansai@Kyoto 10/52
NoSQL の一つとしての MongoDB(1)
ドキュメント指向データベース
バランスの良い NoSQL を目指す
https://wiki.mongodb.com/pages/viewpage.action?pageId=20743144
スケーラビリティ&パフォーマンス
機能の豊富さ
memcached
key/value
store
MongoDB
RDBMS
OSC 2014 Kansai@Kyoto 11/52
MongoDB の強み
ドキュメント指向
多彩なクエリー
文字列としてのマッチ、範囲検索、正規表現など
論理演算で複数の条件の組み合わせも可
B-Tree インデックスによる検索・ソートも使える
ほぼオンメモリで動作するため非常に高速
{
"_id" : ObjectId("524406662caf1cab1f000001"),
"title" : "MongoDB is fun!",
"body" : "I love MongoDB very much.",
"author" : "naruoga@example.com",
"created" : ISODate("2013-09-26T10:03:18.825Z"),
"comment" : [
{ "author" : "foo@example.com",
"content" : "I also love it!" }
]
}
OSC 2014 Kansai@Kyoto 12/52
MongoDB の割り切り
トランザクションを持たない
複数の操作をくるんで、途中で失敗したらロールバック
……といった機能はない
一つ一つのデータ操作はアトミック
JOIN がない
複数のドキュメントを DB 側で結合はできない
アプリケーションで結合する必要があるがアトミックな操
作ではない
…… でも、なくても構わない状況は多いよね? と
いう割り切りがポイント
OSC 2014 Kansai@Kyoto 13/52
MongoDB/NoSQL と RDBMS
NoSQL とは一般に「使い方にクセがある」「どこか
割り切ったことがある」「その代わりにとても得意な
ところがある」もの
事前に「不得意なところが許容できるか」を判断で
きないなら、素直に RDBMS を使ったほうが良い
速度
クエリーの種類
トランザクション
メモリ使用量
ディスク使用量
スケーラビリティ
0
50
100
RDBMS
MongoDB
このグラフは
例であり
実際の評価では
ありません
OSC 2014 Kansai@Kyoto 14/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 15/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 16/52
MongoDB = ドキュメント指向
RDBMS: 関係(表) MongoDB: ドキュメント
ID NAME EMAIL
1 Naruhiko
Ogasawara
naruoga@exam
ple.com
2 Ichiro
Tanaka
tanaka.ichiro@e
xample.com
3 Taro
Yamada
taroy@example.
com
Users
ID CONTENT A_ID
1 ぼくもお気に入り! 2
2 使い所難しいです
けどね。
3
... ... ...
Comments
ID ARTIC
LE_ID
COMM
ENT_ID
1 1 1
2 1 2
... ... ...
CommentsLink
ID TITLE BODY A_ID
1 もんごた
ん楽しい!
MongoDB いいです
ね!好きです!
1
... ... ... ...
Entries {
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
"comment" : [
{ "author" : "Ichiro Tanaka",
"email" : "tanaka.ichiro@example.com",
"content" : " ぼくもお気に入り! " },
{ "author" : "Taro Yamada",
"email" : "taroy@example.com",
"content" : " 使い所難しいですけどね。 " }
]
}
↑JSON
(JavaScript Object Notation)
I
OSC 2014 Kansai@Kyoto 17/52
ドキュメント指向と動的スキーマ (1)
RDBMS: 表
各列の型は一致してい
る必要あり
MongoDB: ドキュメント
それぞれの文書の構造
は異なっていても構わ
ない
検索その他では存在す
る部分だけが対象
ドキュメントの集まりを
「コレクション」と呼ぶ
{
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
"comment" : [
{ "author" : "Ichiro Tanaka",
"email" : "tanaka.ichiro@example.com",
"content" : " ぼくもお気に入り! " },
{ "author" : "Taro Yamada",
"email" : "taroy@example.com",
"content" : " 使い所難しいですけどね。 " },
]
}
{
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
"created" : ISODate("2013-09-26T10:03:18.825Z"),
}
OSC 2014 Kansai@Kyoto 18/52
ドキュメント指向と動的スキーマ (2)
アプリケーションの設計の段階で、スキーマ定義を
厳密に考えないでも大丈夫
すぐに開発に取り掛かれる
カジュアルにスキーマ定義を変更できる
スピード感のあるアプリ開発
パフォーマンスを得るにはスキーマに対する十分な
理解が必要なので「スキーマレス」は厳密には NO
作りながらスキーマを定義していく
動的スキーマ
OSC 2014 Kansai@Kyoto 19/52
スキーマ定義の例:ブログ
大雑把な仕様
記事が持つのはタイトル、内容、著者、記事が書かれた
日時、コメント、 permalink
コメントが持つのは内容、著者
blog.example.com
もんごたん楽しい!
by Naruhiko Ogasawara
MongoDB いいですね!好きです!
2014/01/23 13:13
comment (2)
ラーメン食べたい
by Taro Yamada
なんだかラーメンな気分。どこかで食べ
ていこうかな。
2014/01/22 20:13
comment (2)
...
新着
10 件
Click
blog.example.com/permalink
もんごたん楽しい!
by Naruhiko Ogasawara
MongoDB いいですね!好きです!
2014/01/23 13:13
ぼくもお気に入り!
by Ichiro Tanaka
使い所難しいですけどね。
by Taro Yamada
コメ
ント
OSC 2014 Kansai@Kyoto 20/52
ブログのスキーマ例 (1)
RDBMS 的にはこう
{
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author_id" : ObjectId("52e1ee36..."),
"created_at” :
ISODate("2014-01-24T06:13:54.240Z")
"permalink" : "mongo_tan_is_fun",
"comment" : [
ObjectId("52e1f310..."),
ObjectId("52e1f310...")
]
}
Collection: posts
{
"_id" : ObjectId("52e1ee36..."),
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
}
{
"_id" : ObjectId("52e1f2d3..."),
"author" : "Ichiro Tanaka",
"email" : "ichiro.tanaka@example.com",
}
{
"_id" : ObjectId("52e1f2e6..."),
"author" : "Taro Yamada",
"email" : "taroy@example.com",
}
Collection: authors
{
"_id" : ObjectId("52e1f310..."),
"author_id" : ObjectId("52e1f2d3..."),
"content" : " ぼくもお気に入り! ",
}
{
"_id" : ObjectId("52e1f310..."),
"author_id" : ObjectId("52e1f2e6..."),
"content" : " 使い所難しいですけどね。 ",
}
Collection: comments
正規化のためにコレク
ションを分割
●
ちょっと煩雑
● アプリケーション JOIN
が必要になる
正規化のためにコレク
ションを分割
●
ちょっと煩雑
● アプリケーション JOIN
が必要になる
OSC 2014 Kansai@Kyoto 21/52
ブログのスキーマ例 (2)
投稿とコメントは似た項目が多いのでまとめられる
{
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author_id" : ObjectId("52e1ee36..."),
"created_at” :
ISODate("2014-01-24T06:13:54.240Z")
"permalink" : "mongo_tan_is_fun",
"comment" : [
ObjectId("52e1f310..."),
ObjectId("52e1f310...")
]
}
{
"_id" : ObjectId("52e1f310..."),
"author_id" : ObjectId("52e1f2d3..."),
"content" : " ぼくもお気に入り! ",
}
{
"_id" : ObjectId("52e1f310..."),
"author_id" : ObjectId("52e1f2e6..."),
"content" : " 使い所難しいですけどね。 ",
}
Collection: posts
{
"_id" : ObjectId("52e1ee36..."),
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
}
{
"_id" : ObjectId("52e1f2d3..."),
"author" : "Ichiro Tanaka",
"email" : "ichiro.tanaka@example.com",
}
{
"_id" : ObjectId("52e1f2e6..."),
"author" : "Taro Yamada",
"email" : "taroy@example.com",
}
Collection: authors
動的スキーマの利点を用いる
●
扱うコレクションが一個減ってスッ
キリした
●
アプリケーション JOIN が必要にな
る点は変わらない
動的スキーマの利点を用いる
●
扱うコレクションが一個減ってスッ
キリした
●
アプリケーション JOIN が必要にな
る点は変わらない
OSC 2014 Kansai@Kyoto 22/52
ブログのスキーマ例 (3)
いっそのこと全部埋め込んでしまおう!
{
"_id" : ObjectId("52440666..."),
"title" : " もんごたん楽しい! ",
"body" : "MongoDB いいですね!好きです! ",
"author" : "Naruhiko Ogasawara",
"email" : "naruoga@example.com",
"created_at” :
ISODate("2014-01-24T06:13:54.240Z")
"permalink" : "mongo_tan_is_fun",
"comment" : [
{
"author" : "Ichiro Tanaka",
"email" : "ichiro.tanaka@example.com",
"content" : " ぼくもお気に入り! ",
},
{
"author" : "Taro Yamada",
"email" : "taroy@example.com",
"content" : " 使い所難しいですけどね。 ",
},
]
}
Collection: posts
JSON においては配列の要素内には
任意の JSON オブジェクトをとれるの
で、この中にコメントの情報を直接埋
め込んでしまう( embedded )
● MongoDB の強力な文書操作機能
により、配列内部にデータを押し込
んでも柔軟に操作可能!
● あれ、 author 正規化しなくていい
の?
●
考えてみれば、ユーザー名とかパ
スワードのたぐいはブログアプリ側
でセッションで管理しているはずな
ので、 DB 側でユニーク性を保証す
る必要はない!と割り切れる
●
迷ったら埋め込み文書、が
MongoDB 的スキーマ設計
JSON においては配列の要素内には
任意の JSON オブジェクトをとれるの
で、この中にコメントの情報を直接埋
め込んでしまう( embedded )
● MongoDB の強力な文書操作機能
により、配列内部にデータを押し込
んでも柔軟に操作可能!
● あれ、 author 正規化しなくていい
の?
●
考えてみれば、ユーザー名とかパ
スワードのたぐいはブログアプリ側
でセッションで管理しているはずな
ので、 DB 側でユニーク性を保証す
る必要はない!と割り切れる
●
迷ったら埋め込み文書、が
MongoDB 的スキーマ設計
OSC 2014 Kansai@Kyoto 23/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 24/52
●MongoDB の性能の秘密
MongoDB はファイルシステムに展開されているコレ
クションを mmap している
ローカリティがある READ アクセスについてはオンメモリ
でアクセスするので高速
要は「ディスクにスワップアウトできるオンメモリ DB 」
ローカリティが低いアクセスは性能が出ない
Storage
V. mem
P. mem
OSC 2014 Kansai@Kyoto 25/52
データアクセスとインデックス
MongoDB のデータアクセスはとても素朴
頭から順に舐めているだけ(線形探索)=検索 O(n)
ついでにいうとドキュメントの順序は保証されない
インデックス
あるキーに着目した B-Tree インデックス=検索 O(log n)
検索・ソートに利用可
Doc1 Doc2 Doc3 … DocN
update Doc2 (サイズ拡大)
Doc1 Doc2Doc3 … DocN(隙間)
OSC 2014 Kansai@Kyoto 26/52
インデックス詳細
インデックスはコレクション自体と同じファイル
どんどん張っているとデータサイズが肥大化する
インデックスを後から張るとデータ量に比例した時
間がかかる(当然)
昇順・降順でインデックスは張れる
複数キーのインデックスも利用可能
db.posts.ensureIndex({created_at:-1, author:1})
部分的に使うことも可能
OSC 2014 Kansai@Kyoto 27/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 28/52
レプリカセット基礎 (1)
レプリカセット:簡単な仕組みで高可用性を実現
最低 3 台のノードをセットにして動かす
アプリケーションに応答するプライマリノードは自動的に
決定される(明示的なマスターノードは存在しない)
Secondary 1
Secondary 2Primary
Application
Driver
Read
Write
Heartbeat
Replication
Replication
OSC 2014 Kansai@Kyoto 29/52
レプリカセット基礎 (2)
プライマリノードがダウンした場合
残ったノード間で投票を行い次のプライマリを決める
この場合は「どこまでレプリケーションが終わっている
か」で決まる
Secondary 1
Secondary 2Primary
Application
Driver
Heartbeat
ぼくは 5 分前の
処理まで
レプリカもらったよ
ぼくは 10 分前
までだなぁ
OSC 2014 Kansai@Kyoto 30/52
レプリカセット基礎 (3)
選ばれたノードが次のプライマリになる
この時点でノードがダウンすると、 1 台では投票ができ
ないためレプリカセットがダウンする
1/3 冗長
Primary
Secondary 2Primary
Application
Driver
Heartbeat
じゃあぼくが
プライマリーやるね
Replication
READ
WRITE
OSC 2014 Kansai@Kyoto 31/52
レプリカセット基礎 (4)
ダウンしていたノードが復活するとセカンダリノード
に復帰
ただしダウンタイムが長いと自動復帰は不可
動いているセカンダリノードからリストアするのが無難
Primary
Secondary 2Secondary 2
Application
Driver
Heartbeat
Replication
READ
WRITE
OSC 2014 Kansai@Kyoto 32/52
レプリカセット基礎 (5)
Heartbeat:
ノード間の死活監視
OPLOG:
プライマリノードの操作をセカンダリにレプリケーション
するために、操作を保存するコレクション
有限サイズのコレクション( Capped collection )
セカンダリが長時間停止していると溢れてレプリカセットが機
能不全を起こす
OSC 2014 Kansai@Kyoto 33/52
レプリカセット応用 (1)
Arbiter: 投票権のみ持ち、データを持たないノード
システム構成のコストを下げることが可能
ただし冗長性は下がる(トレードオフ)
Primary
Secondary Arbiter
OSC 2014 Kansai@Kyoto 34/52
レプリカセット応用 (2)
Delayed Node: オペレーションミス対策
レプリケーションを意図的に遅らせたノード
オペミスしてデータを失ったときにすぐに Delayed Node
から巻き戻せば復帰可能
Primary
Secondary Secondary
Delayed
Secondary
30 分遅れ
slaveDelay=1800
priority=0
hidden=true
OSC 2014 Kansai@Kyoto 35/52
レプリカセット応用 (3)
セカンダリノードに対するアクセス
Write Concern
データの書き込みがどこまで波及
するまで待つかを設定する値
基本は即座に戻る
セカンダリノードの数も指定可
Read Prefence
セカンダリノードからの読み込みを
許可してプライマリの負荷を下げる
古い値を掴んでも大丈夫なとき
P
S S
j : 1
w : 2
P
S S
PRIMARY
SECONDARY
OSC 2014 Kansai@Kyoto 36/52
レプリカセット応用 (4)
Disaster Recovery (災害復旧)対策
データセンタをまたいでレプリカセットを構築することで、
DC がまるごと死んだとしてもサービス提供可能
Primary
Secondary Secondary Secondary
Secondary
Arbiter
Datacenter 1 Datacenter 2
OSC 2014 Kansai@Kyoto 37/52
レプリカセットの魅力
仕組み自体はとてもシンプル
高可用性を容易に実現できる
高いシステム構成の自由度
DR 対策やバックアップ対策などにも対応可能
水平展開、 DC をまたいだ運用が容易なクラウド時
代にふさわしい仕組み
OSC 2014 Kansai@Kyoto 38/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 39/52
シャーディングとは
sharding: 一般的なデータベース用語
DB 負荷を分散させるためにスケールアウトさせること
RDBMS の場合、同時にアクセスする必要のあるデータ
は一つのサーバで処理するように注意深く配置する
非常に難しい
スケールアップ
DBMS
DBMS
DBMS
スケールアウト
DBMS DBMS DBMS DBMS
DBMS
DBMS DBMS
DBMS DBMS
OSC 2014 Kansai@Kyoto 40/52
MongoDB のオートシャーディング
MongoDB はスケールアウト(=シャーディング)で
パフォーマンスを稼ぐ戦略
シャーディングを簡単に行う仕組みが組み込まれている
=オートシャーディング
OSC 2014 Kansai@Kyoto 41/52
オートシャーディングの仕組み (1)
シャードキー
オートシャーディングの
動作を規定するキー(複
合可)
シャードキーの範囲に
よってコレクションを塊
(チャンク)に分割する
チャンク
サイズは 64MB (標準)
DB の操作によりサイズ
超過した場合は分割さ
れる
naruhiko
Shard key: username
< 64MB
akio rakutaro-∞ +∞
Shard 1
A
Chunk
< 64MB
C
ChunkChunk
< 64MB
B
OSC 2014 Kansai@Kyoto 42/52
オートシャーディングの仕組み (1)
シャードキー
オートシャーディングの
動作を規定するキー(複
合可)
シャードキーの範囲に
よってコレクションを塊
(チャンク)に分割する
チャンク
サイズは 64MB (標準)
DB の操作によりサイズ
超過した場合は分割さ
れる
naruhiko
Shard key: username
< 64MB
akio rakutaro-∞ +∞
Shard 1
A
Chunk
< 64MB
C
ChunkChunk
< 64MB
B
db.foo.insert({username: "osamu", ....})
OSC 2014 Kansai@Kyoto 43/52
オートシャーディングの仕組み (1)
シャードキー
オートシャーディングの
動作を規定するキー(複
合可)
シャードキーの範囲に
よってコレクションを塊
(チャンク)に分割する
チャンク
サイズは 64MB (標準)
DB の操作によりサイズ
超過した場合は分割さ
れる
naruhiko
Shard key: username
< 64MB
akio rakutaro-∞ +∞
Shard 1
A
Chunk
< 64MB
C
ChunkChunk
< 64MB
B
db.foo.insert({username: "osamu", ....})
naruhiko
Shard key: username
< 64MB
akio rakutaro-∞ +∞
Shard 1
A
B から
分割
< 64MB
C
< 64MB
B
osamu
< 64MB
D
OSC 2014 Kansai@Kyoto 44/52
オートシャーディングの仕組み (2)
リバランシング
各シャードにおいて、最大のチャンク数を持つシャードと
最小のチャンク数を持つシャードの差が規定値を超えた
場合、バランスを取るためチャンクが移動する
新規にシャードを追加した場合も同様にリバランシング
が起きる
A
Shard 1 Shard 2
OSC 2014 Kansai@Kyoto 45/52
オートシャーディングの仕組み (2)
リバランシング
各シャードにおいて、最大のチャンク数を持つシャードと
最小のチャンク数を持つシャードの差が規定値を超えた
場合、バランスを取るためチャンクが移動する
新規にシャードを追加した場合も同様にリバランシング
が起きる
A
Shard 1 Shard 2
A
Shard 1 Shard 2
B
OSC 2014 Kansai@Kyoto 46/52
オートシャーディングの仕組み (2)
リバランシング
各シャードにおいて、最大のチャンク数を持つシャードと
最小のチャンク数を持つシャードの差が規定値を超えた
場合、バランスを取るためチャンクが移動する
新規にシャードを追加した場合も同様にリバランシング
が起きる
A
Shard 1 Shard 2
A
Shard 1 Shard 2
B
A
Shard 1 Shard 2
B
C
OSC 2014 Kansai@Kyoto 47/52
オートシャーディングの仕組み (2)
リバランシング
各シャードにおいて、最大のチャンク数を持つシャードと
最小のチャンク数を持つシャードの差が規定値を超えた
場合、バランスを取るためチャンクが移動する
新規にシャードを追加した場合も同様にリバランシング
が起きる
A
Shard 1 Shard 2
A
Shard 1 Shard 2
B
A
Shard 1 Shard 2
B
C
A
Shard 1 Shard 2
B
C
C
OSC 2014 Kansai@Kyoto 48/52
シャードキーに求められる性質
適度なランダムネス
ある程度チャンク分割が進んだあとは、シャード内にまん
べんなくチャンクが分配されるようになること
シャードキーの -∞ 〜 +∞ まで概ね均等にデータが配
置されること
適度なローカリティ
あるひとまとまりの処理が数個のチャンク内で完結する
シャーディングでは mmap がチャンク単位になるため、
うまくいくと各シャードでオンメモリで処理が可能になる
OSC 2014 Kansai@Kyoto 49/52
オートシャーディングは万能か?
シャードキーをうまく選定できるか?が肝
シャードキーの選定ミスはパフォーマンスの劣化(と、場
合によっては OPLOG 溢れによるデータ喪失)を招く
シャードキーは一度決めたら変更は不可能なので、パイ
ロットプロジェクトなどで慎重にデータの性質を見極め
る必要がある
最初から超大規模なデータを扱うことだけが分かって
おり、データの性質が不明確な案件だとリスクがある
OSC 2014 Kansai@Kyoto 50/52
内容
MongoDB JP とは
NoSQL と MongoDB
MongoDB の性質
ドキュメント指向
性能とインデックス
レプリカセット
オートシャーディング
まとめ
OSC 2014 Kansai@Kyoto 51/52
まとめ
MongoDB はクラウド時代に必要な種々の要素を備
えた、 RDBMS を補完する優れた DB である
ただし嵌まりパターンに使った場合
これは MongoDB に限らず NoSQL に共通
アプリケーションを開発しながらスキーマをデザイン
していく動的スキーマ
シンプルな仕組みで高可用性を実現し、なおかつさ
まざまなバリエーションを作れるレプリカセット
同じマシンを並べてパフォーマンスを稼ぐ水平ス
ケーリングを支援するオートシャーディング
OSC 2014 Kansai@Kyoto 52/52
参考図書
MongoDB イン・アクション
http://www.amazon.co.jp/dp/4873115906
Kyle Banker ( 著 ), Sky 株式会社 玉川 竜司 ( 翻訳 )
オライリー・ジャパン
データベースエンジニア養成読本 [DB を自由自在
に活用するための知識とノウハウ満載 !]
http://www.amazon.co.jp/dp/4774158062
データベースエンジニア養成読本編集部
技術評論社

More Related Content

What's hot

今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウKentaro Yoshida
 
事例で学ぶApache Cassandra
事例で学ぶApache Cassandra事例で学ぶApache Cassandra
事例で学ぶApache CassandraYuki Morishita
 
MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBippei_suzuki
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送Google Cloud Platform - Japan
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計Takahiro Kubo
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説Masahiko Sawada
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRecruit Technologies
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionTetsutaro Watanabe
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選Tomoya Kawanishi
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...NTT DATA Technology & Innovation
 

What's hot (20)

今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
事例で学ぶApache Cassandra
事例で学ぶApache Cassandra事例で学ぶApache Cassandra
事例で学ぶApache Cassandra
 
MongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDBMongoDB概要:金融業界でのMongoDB
MongoDB概要:金融業界でのMongoDB
 
WiredTigerを詳しく説明
WiredTigerを詳しく説明WiredTigerを詳しく説明
WiredTigerを詳しく説明
 
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説PostgreSQL 15の新機能を徹底解説
PostgreSQL 15の新機能を徹底解説
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけRDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
MLOpsはバズワード
MLOpsはバズワードMLOpsはバズワード
MLOpsはバズワード
 
PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選PostgreSQL のイケてるテクニック7選
PostgreSQL のイケてるテクニック7選
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 

Viewers also liked

業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法Yoshitaka Mori
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法Co-graph Inc.
 
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)Yuji Otani
 
Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Michael Nguyen
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略ippei_suzuki
 
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...Insight Technology, Inc.
 
MongoDB インサイド SaaS型業務アプリケーション
MongoDB インサイド  SaaS型業務アプリケーションMongoDB インサイド  SaaS型業務アプリケーション
MongoDB インサイド SaaS型業務アプリケーションYuki Ishikawa
 
Els éssers vius (resum Abril)
Els éssers vius (resum Abril)Els éssers vius (resum Abril)
Els éssers vius (resum Abril)ciclesuperiorpm
 
[コグラフ]spss modelerによるデータ加工入門
[コグラフ]spss modelerによるデータ加工入門[コグラフ]spss modelerによるデータ加工入門
[コグラフ]spss modelerによるデータ加工入門Co-graph Inc.
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムHitoshi Asai
 
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)Evan Chan
 
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés RianchoCODE BLUE
 
MongoDB WiredTiger Internals
MongoDB WiredTiger InternalsMongoDB WiredTiger Internals
MongoDB WiredTiger InternalsNorberto Leite
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介IBM Analytics Japan
 
担当プロダクトのDBをまるっとリプレイスするためにやったこと
担当プロダクトのDBをまるっとリプレイスするためにやったこと担当プロダクトのDBをまるっとリプレイスするためにやったこと
担当プロダクトのDBをまるっとリプレイスするためにやったことShinya Takara
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 

Viewers also liked (20)

業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法
 
業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法業務システムにおけるMongoDB活用法
業務システムにおけるMongoDB活用法
 
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
RDBとNoSQLの上手な付き合い方(勉強会@LIG 2013/11/11)
 
Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)Mongo db + xsd:xml(20130219)
Mongo db + xsd:xml(20130219)
 
MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略MongoDB: システム可用性を拡張するインデクス戦略
MongoDB: システム可用性を拡張するインデクス戦略
 
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
[db tech showcase Tokyo 2016] A25: ACIDトランザクションをサポートするエンタープライズ向けNoSQL Databas...
 
MongoDB インサイド SaaS型業務アプリケーション
MongoDB インサイド  SaaS型業務アプリケーションMongoDB インサイド  SaaS型業務アプリケーション
MongoDB インサイド SaaS型業務アプリケーション
 
MongoDB3.2の紹介
MongoDB3.2の紹介MongoDB3.2の紹介
MongoDB3.2の紹介
 
Els éssers vius (resum Abril)
Els éssers vius (resum Abril)Els éssers vius (resum Abril)
Els éssers vius (resum Abril)
 
[コグラフ]spss modelerによるデータ加工入門
[コグラフ]spss modelerによるデータ加工入門[コグラフ]spss modelerによるデータ加工入門
[コグラフ]spss modelerによるデータ加工入門
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
Spark Job Server and Spark as a Query Engine (Spark Meetup 5/14)
 
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
[CB16] 難解なウェブアプリケーションの脆弱性 by Andrés Riancho
 
MongoDB WiredTiger Internals
MongoDB WiredTiger InternalsMongoDB WiredTiger Internals
MongoDB WiredTiger Internals
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
 
Datomic&datalog紹介
Datomic&datalog紹介Datomic&datalog紹介
Datomic&datalog紹介
 
担当プロダクトのDBをまるっとリプレイスするためにやったこと
担当プロダクトのDBをまるっとリプレイスするためにやったこと担当プロダクトのDBをまるっとリプレイスするためにやったこと
担当プロダクトのDBをまるっとリプレイスするためにやったこと
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 

Similar to MongoDB very basic (Japanese) / MongoDB基礎の基礎

Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきましたMasaru Kobashigawa
 
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!Tetsutaro Watanabe
 
de:code 夏まつり クイズクライアント作ったよ!
de:code 夏まつり クイズクライアント作ったよ!de:code 夏まつり クイズクライアント作ったよ!
de:code 夏まつり クイズクライアント作ったよ!Kazumi IWANAGA
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Shoot Morii
 
WordPress初心者テーマ作成勉強会
WordPress初心者テーマ作成勉強会WordPress初心者テーマ作成勉強会
WordPress初心者テーマ作成勉強会Tsuyoshi.
 
MongoDB_JP 今後の活動計画
MongoDB_JP 今後の活動計画MongoDB_JP 今後の活動計画
MongoDB_JP 今後の活動計画Takahiro Inoue
 
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅Takuya Kawabe
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseToshi Harada
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseToshi Harada
 
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光Hiroyuki Ishikawa
 
Azure Cognitive ServicesのCustom Vision APIをDockerで使う
Azure Cognitive ServicesのCustom Vision APIをDockerで使うAzure Cognitive ServicesのCustom Vision APIをDockerで使う
Azure Cognitive ServicesのCustom Vision APIをDockerで使うKeiji Kamebuchi
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
使いやすいWordPressのためのCSSのつくりかた
使いやすいWordPressのためのCSSのつくりかた使いやすいWordPressのためのCSSのつくりかた
使いやすいWordPressのためのCSSのつくりかたHiroshi Urabe
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Shotaro Suzuki
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"Kentaro Yoshida
 
MongoDBの可能性の話
MongoDBの可能性の話MongoDBの可能性の話
MongoDBの可能性の話Akihiro Kuwano
 

Similar to MongoDB very basic (Japanese) / MongoDB基礎の基礎 (20)

Osc2012.dbに行ってきました
Osc2012.dbに行ってきましたOsc2012.dbに行ってきました
Osc2012.dbに行ってきました
 
JSDoc ToolKit
JSDoc ToolKitJSDoc ToolKit
JSDoc ToolKit
 
MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!MongoDB World 2014に行ってきた!
MongoDB World 2014に行ってきた!
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 
de:code 夏まつり クイズクライアント作ったよ!
de:code 夏まつり クイズクライアント作ったよ!de:code 夏まつり クイズクライアント作ったよ!
de:code 夏まつり クイズクライアント作ったよ!
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門
 
WordPress初心者テーマ作成勉強会
WordPress初心者テーマ作成勉強会WordPress初心者テーマ作成勉強会
WordPress初心者テーマ作成勉強会
 
MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 
MongoDB_JP 今後の活動計画
MongoDB_JP 今後の活動計画MongoDB_JP 今後の活動計画
MongoDB_JP 今後の活動計画
 
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅Base DDD(ドメイン駆動設計) 参考文献を巡る旅
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
 
Do postgres-dream-of-graph-database
Do postgres-dream-of-graph-databaseDo postgres-dream-of-graph-database
Do postgres-dream-of-graph-database
 
Osc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-databaseOsc shimane-2016-do-postgres-dream-of-graph-database
Osc shimane-2016-do-postgres-dream-of-graph-database
 
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
[DojoCon Japan 2018]自分にできる貢献のしかたを見つけよう by CoderDojo光
 
Azure Cognitive ServicesのCustom Vision APIをDockerで使う
Azure Cognitive ServicesのCustom Vision APIをDockerで使うAzure Cognitive ServicesのCustom Vision APIをDockerで使う
Azure Cognitive ServicesのCustom Vision APIをDockerで使う
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
使いやすいWordPressのためのCSSのつくりかた
使いやすいWordPressのためのCSSのつくりかた使いやすいWordPressのためのCSSのつくりかた
使いやすいWordPressのためのCSSのつくりかた
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127
 
MT LOVE!
MT LOVE!MT LOVE!
MT LOVE!
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
MongoDBの可能性の話
MongoDBの可能性の話MongoDBの可能性の話
MongoDBの可能性の話
 

More from Naruhiko Ogasawara

さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...Naruhiko Ogasawara
 
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImageNaruhiko Ogasawara
 
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's next
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's nextLibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's next
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's nextNaruhiko Ogasawara
 
The Document Foundationについて / About The Document Foundation
The Document Foundationについて / About The Document FoundationThe Document Foundationについて / About The Document Foundation
The Document Foundationについて / About The Document FoundationNaruhiko Ogasawara
 
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certification
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certificationTDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certification
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certificationNaruhiko Ogasawara
 
Building a bridge between Japanese LibreOffice community and the world
Building a bridge between Japanese LibreOffice community and the worldBuilding a bridge between Japanese LibreOffice community and the world
Building a bridge between Japanese LibreOffice community and the worldNaruhiko Ogasawara
 
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)Naruhiko Ogasawara
 
宣伝:SeleniumConf Tokyo 2019やりますよ!
宣伝:SeleniumConf Tokyo 2019やりますよ!宣伝:SeleniumConf Tokyo 2019やりますよ!
宣伝:SeleniumConf Tokyo 2019やりますよ!Naruhiko Ogasawara
 
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systems
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systemsUsing latest LibreOffice on openSUSE Leap 15 - by modern packaging systems
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systemsNaruhiko Ogasawara
 
The Document Foundationについて
The Document FoundationについてThe Document Foundationについて
The Document FoundationについてNaruhiko Ogasawara
 
LibreOffice: The Office Suite with Mixing Bowl Culture
LibreOffice: The Office Suite with Mixing Bowl CultureLibreOffice: The Office Suite with Mixing Bowl Culture
LibreOffice: The Office Suite with Mixing Bowl CultureNaruhiko Ogasawara
 
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...Naruhiko Ogasawara
 
Hospital days in czech / チェコで入院した話
Hospital days in czech / チェコで入院した話Hospital days in czech / チェコで入院した話
Hospital days in czech / チェコで入院した話Naruhiko Ogasawara
 
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE users
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE usersopenSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE users
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE usersNaruhiko Ogasawara
 
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Naruhiko Ogasawara
 
LibreOfficeの最新動向 / LibreOffice current status
LibreOfficeの最新動向 / LibreOffice current statusLibreOfficeの最新動向 / LibreOffice current status
LibreOfficeの最新動向 / LibreOffice current statusNaruhiko Ogasawara
 
Vertical Writing: typical use-cases and current status in LibreOffice
Vertical Writing: typical use-cases and current status in LibreOfficeVertical Writing: typical use-cases and current status in LibreOffice
Vertical Writing: typical use-cases and current status in LibreOfficeNaruhiko Ogasawara
 
LibreOffice, the free office productive suite and it's status of accessibilit...
LibreOffice, the free office productive suite and it's status of accessibilit...LibreOffice, the free office productive suite and it's status of accessibilit...
LibreOffice, the free office productive suite and it's status of accessibilit...Naruhiko Ogasawara
 

More from Naruhiko Ogasawara (20)

さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
さらばデスクトップ?モバイル・クラウド時代のLibreOfficeの挑戦/LibreOffice current status, or the chall...
 
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
 
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's next
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's nextLibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's next
LibreOffice Asia Conference 2019 Tokyo; what we had achieved, and what's next
 
小江戸らぐBBQ 2019
小江戸らぐBBQ 2019小江戸らぐBBQ 2019
小江戸らぐBBQ 2019
 
The Document Foundationについて / About The Document Foundation
The Document Foundationについて / About The Document FoundationThe Document Foundationについて / About The Document Foundation
The Document Foundationについて / About The Document Foundation
 
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certification
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certificationTDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certification
TDFと寄付、メンバーシップ、認定制度 / TDF and donation, membership and certification
 
Building a bridge between Japanese LibreOffice community and the world
Building a bridge between Japanese LibreOffice community and the worldBuilding a bridge between Japanese LibreOffice community and the world
Building a bridge between Japanese LibreOffice community and the world
 
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)
Happy Software Freedom Day! (Koedo Linux Users Group, Tokyo, Japan)
 
宣伝:SeleniumConf Tokyo 2019やりますよ!
宣伝:SeleniumConf Tokyo 2019やりますよ!宣伝:SeleniumConf Tokyo 2019やりますよ!
宣伝:SeleniumConf Tokyo 2019やりますよ!
 
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systems
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systemsUsing latest LibreOffice on openSUSE Leap 15 - by modern packaging systems
Using latest LibreOffice on openSUSE Leap 15 - by modern packaging systems
 
The Document Foundationについて
The Document FoundationについてThe Document Foundationについて
The Document Foundationについて
 
告知 ー OSnuC Kawagoe 2018
告知 ー OSnuC Kawagoe 2018告知 ー OSnuC Kawagoe 2018
告知 ー OSnuC Kawagoe 2018
 
LibreOffice: The Office Suite with Mixing Bowl Culture
LibreOffice: The Office Suite with Mixing Bowl CultureLibreOffice: The Office Suite with Mixing Bowl Culture
LibreOffice: The Office Suite with Mixing Bowl Culture
 
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...
Make It Better Together: コミュニティを主体としたLibreOffice翻訳 / : Community-centered Lib...
 
Hospital days in czech / チェコで入院した話
Hospital days in czech / チェコで入院した話Hospital days in czech / チェコで入院した話
Hospital days in czech / チェコで入院した話
 
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE users
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE usersopenSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE users
openSUSEユーザーに向けたLibreOffice入門 / Introduction of LibreOffice for openSUSE users
 
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
 
LibreOfficeの最新動向 / LibreOffice current status
LibreOfficeの最新動向 / LibreOffice current statusLibreOfficeの最新動向 / LibreOffice current status
LibreOfficeの最新動向 / LibreOffice current status
 
Vertical Writing: typical use-cases and current status in LibreOffice
Vertical Writing: typical use-cases and current status in LibreOfficeVertical Writing: typical use-cases and current status in LibreOffice
Vertical Writing: typical use-cases and current status in LibreOffice
 
LibreOffice, the free office productive suite and it's status of accessibilit...
LibreOffice, the free office productive suite and it's status of accessibilit...LibreOffice, the free office productive suite and it's status of accessibilit...
LibreOffice, the free office productive suite and it's status of accessibilit...
 

Recently uploaded

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Recently uploaded (8)

Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

MongoDB very basic (Japanese) / MongoDB基礎の基礎

  • 1. OSC 2014 Kansai@Kyoto MongoDB 基本の基本 2014.08.02 MongoDB 日本ユーザー会 MongoDB JP 小笠原徳彦 (OGASAWARA, Naruhiko)
  • 2. OSC 2014 Kansai@Kyoto 2/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 3. OSC 2014 Kansai@Kyoto 3/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 4. OSC 2014 Kansai@Kyoto 4/52 MongoDB JP とは MongoDB を使ってる!使いたい!興味ある!人たち の集まり 公式サイト: http://www.mongodb.jp/ Google Groups: https://groups.google.com/forum/#!forum/mongodb-jp Facebook Page: https://www.facebook.com/MongodbJp 丸の内 MongoDB 勉強会 #mongonouchi http://syokenz.github.io/marunouchi-mongodb/
  • 5. OSC 2014 Kansai@Kyoto 5/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 6. OSC 2014 Kansai@Kyoto 6/52 MongoDB とは MongoDB Inc. が中心になって開発している NoSQL データベース MongoDB http://www.mongodb.org/ MongoDB Inc. http://www.mongodb.com/ ライセンスは AGPLv3 SQL のような DDL は存在しない 言語ごとに異なる「ドライバー」を経由してアクセス C 、 C++ 、 Ruby 、 Perl 、 Python 、 Java 、 JavaScript 、 Scala 、 Haskell 、……
  • 7. OSC 2014 Kansai@Kyoto 7/52 RDBMS と NoSQL(1) RDBMS (Relational Database Management System) 関係モデルに基づいたデータベース管理システム SQL (Standard Query Language) による宣言的な操作 オプティマイザにより「どうデータを格納し」「どうデータを得 る」かは最適化されて高速に実行される アトミックなデータ操作 データの一貫性保持が重要
  • 8. OSC 2014 Kansai@Kyoto 8/52 RDBMS と NoSQL(2) しかしクラウド時代においては、データの一貫性保 持はコストが高い……こともある 一貫性保持は常に必要なのか? 例: EC サイトの在庫状況はリアルタイムでなくてもよい 決済時に一貫性が担保されていればよい 一貫性の完全な保持を諦めれば水平にスケールできる DB App Tokyo US App EU App EU AppDB US AppDB Tokyo AppDB
  • 9. OSC 2014 Kansai@Kyoto 9/52 RDBMS と NoSQL(3) クラウドに必要な要件を持つストレージエンジンを RDBMS と使いわける シンプルな機能 高速 スケーラブル Not Only SQL = NoSQL (SQL に NO! ではない ) Key Value Store (KVS) Apache Cassandra, Tokyo Cabinet, Rakuten ROMA, Redis, Riak グラフ指向 DB Neo4j, HyperGraphDB 列指向 DB Apache HBase ドキュメント指向 DB CouchDB, MongoDB
  • 10. OSC 2014 Kansai@Kyoto 10/52 NoSQL の一つとしての MongoDB(1) ドキュメント指向データベース バランスの良い NoSQL を目指す https://wiki.mongodb.com/pages/viewpage.action?pageId=20743144 スケーラビリティ&パフォーマンス 機能の豊富さ memcached key/value store MongoDB RDBMS
  • 11. OSC 2014 Kansai@Kyoto 11/52 MongoDB の強み ドキュメント指向 多彩なクエリー 文字列としてのマッチ、範囲検索、正規表現など 論理演算で複数の条件の組み合わせも可 B-Tree インデックスによる検索・ソートも使える ほぼオンメモリで動作するため非常に高速 { "_id" : ObjectId("524406662caf1cab1f000001"), "title" : "MongoDB is fun!", "body" : "I love MongoDB very much.", "author" : "naruoga@example.com", "created" : ISODate("2013-09-26T10:03:18.825Z"), "comment" : [ { "author" : "foo@example.com", "content" : "I also love it!" } ] }
  • 12. OSC 2014 Kansai@Kyoto 12/52 MongoDB の割り切り トランザクションを持たない 複数の操作をくるんで、途中で失敗したらロールバック ……といった機能はない 一つ一つのデータ操作はアトミック JOIN がない 複数のドキュメントを DB 側で結合はできない アプリケーションで結合する必要があるがアトミックな操 作ではない …… でも、なくても構わない状況は多いよね? と いう割り切りがポイント
  • 13. OSC 2014 Kansai@Kyoto 13/52 MongoDB/NoSQL と RDBMS NoSQL とは一般に「使い方にクセがある」「どこか 割り切ったことがある」「その代わりにとても得意な ところがある」もの 事前に「不得意なところが許容できるか」を判断で きないなら、素直に RDBMS を使ったほうが良い 速度 クエリーの種類 トランザクション メモリ使用量 ディスク使用量 スケーラビリティ 0 50 100 RDBMS MongoDB このグラフは 例であり 実際の評価では ありません
  • 14. OSC 2014 Kansai@Kyoto 14/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 15. OSC 2014 Kansai@Kyoto 15/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 16. OSC 2014 Kansai@Kyoto 16/52 MongoDB = ドキュメント指向 RDBMS: 関係(表) MongoDB: ドキュメント ID NAME EMAIL 1 Naruhiko Ogasawara naruoga@exam ple.com 2 Ichiro Tanaka tanaka.ichiro@e xample.com 3 Taro Yamada taroy@example. com Users ID CONTENT A_ID 1 ぼくもお気に入り! 2 2 使い所難しいです けどね。 3 ... ... ... Comments ID ARTIC LE_ID COMM ENT_ID 1 1 1 2 1 2 ... ... ... CommentsLink ID TITLE BODY A_ID 1 もんごた ん楽しい! MongoDB いいです ね!好きです! 1 ... ... ... ... Entries { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", "comment" : [ { "author" : "Ichiro Tanaka", "email" : "tanaka.ichiro@example.com", "content" : " ぼくもお気に入り! " }, { "author" : "Taro Yamada", "email" : "taroy@example.com", "content" : " 使い所難しいですけどね。 " } ] } ↑JSON (JavaScript Object Notation) I
  • 17. OSC 2014 Kansai@Kyoto 17/52 ドキュメント指向と動的スキーマ (1) RDBMS: 表 各列の型は一致してい る必要あり MongoDB: ドキュメント それぞれの文書の構造 は異なっていても構わ ない 検索その他では存在す る部分だけが対象 ドキュメントの集まりを 「コレクション」と呼ぶ { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", "comment" : [ { "author" : "Ichiro Tanaka", "email" : "tanaka.ichiro@example.com", "content" : " ぼくもお気に入り! " }, { "author" : "Taro Yamada", "email" : "taroy@example.com", "content" : " 使い所難しいですけどね。 " }, ] } { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", "created" : ISODate("2013-09-26T10:03:18.825Z"), }
  • 18. OSC 2014 Kansai@Kyoto 18/52 ドキュメント指向と動的スキーマ (2) アプリケーションの設計の段階で、スキーマ定義を 厳密に考えないでも大丈夫 すぐに開発に取り掛かれる カジュアルにスキーマ定義を変更できる スピード感のあるアプリ開発 パフォーマンスを得るにはスキーマに対する十分な 理解が必要なので「スキーマレス」は厳密には NO 作りながらスキーマを定義していく 動的スキーマ
  • 19. OSC 2014 Kansai@Kyoto 19/52 スキーマ定義の例:ブログ 大雑把な仕様 記事が持つのはタイトル、内容、著者、記事が書かれた 日時、コメント、 permalink コメントが持つのは内容、著者 blog.example.com もんごたん楽しい! by Naruhiko Ogasawara MongoDB いいですね!好きです! 2014/01/23 13:13 comment (2) ラーメン食べたい by Taro Yamada なんだかラーメンな気分。どこかで食べ ていこうかな。 2014/01/22 20:13 comment (2) ... 新着 10 件 Click blog.example.com/permalink もんごたん楽しい! by Naruhiko Ogasawara MongoDB いいですね!好きです! 2014/01/23 13:13 ぼくもお気に入り! by Ichiro Tanaka 使い所難しいですけどね。 by Taro Yamada コメ ント
  • 20. OSC 2014 Kansai@Kyoto 20/52 ブログのスキーマ例 (1) RDBMS 的にはこう { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author_id" : ObjectId("52e1ee36..."), "created_at” : ISODate("2014-01-24T06:13:54.240Z") "permalink" : "mongo_tan_is_fun", "comment" : [ ObjectId("52e1f310..."), ObjectId("52e1f310...") ] } Collection: posts { "_id" : ObjectId("52e1ee36..."), "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", } { "_id" : ObjectId("52e1f2d3..."), "author" : "Ichiro Tanaka", "email" : "ichiro.tanaka@example.com", } { "_id" : ObjectId("52e1f2e6..."), "author" : "Taro Yamada", "email" : "taroy@example.com", } Collection: authors { "_id" : ObjectId("52e1f310..."), "author_id" : ObjectId("52e1f2d3..."), "content" : " ぼくもお気に入り! ", } { "_id" : ObjectId("52e1f310..."), "author_id" : ObjectId("52e1f2e6..."), "content" : " 使い所難しいですけどね。 ", } Collection: comments 正規化のためにコレク ションを分割 ● ちょっと煩雑 ● アプリケーション JOIN が必要になる 正規化のためにコレク ションを分割 ● ちょっと煩雑 ● アプリケーション JOIN が必要になる
  • 21. OSC 2014 Kansai@Kyoto 21/52 ブログのスキーマ例 (2) 投稿とコメントは似た項目が多いのでまとめられる { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author_id" : ObjectId("52e1ee36..."), "created_at” : ISODate("2014-01-24T06:13:54.240Z") "permalink" : "mongo_tan_is_fun", "comment" : [ ObjectId("52e1f310..."), ObjectId("52e1f310...") ] } { "_id" : ObjectId("52e1f310..."), "author_id" : ObjectId("52e1f2d3..."), "content" : " ぼくもお気に入り! ", } { "_id" : ObjectId("52e1f310..."), "author_id" : ObjectId("52e1f2e6..."), "content" : " 使い所難しいですけどね。 ", } Collection: posts { "_id" : ObjectId("52e1ee36..."), "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", } { "_id" : ObjectId("52e1f2d3..."), "author" : "Ichiro Tanaka", "email" : "ichiro.tanaka@example.com", } { "_id" : ObjectId("52e1f2e6..."), "author" : "Taro Yamada", "email" : "taroy@example.com", } Collection: authors 動的スキーマの利点を用いる ● 扱うコレクションが一個減ってスッ キリした ● アプリケーション JOIN が必要にな る点は変わらない 動的スキーマの利点を用いる ● 扱うコレクションが一個減ってスッ キリした ● アプリケーション JOIN が必要にな る点は変わらない
  • 22. OSC 2014 Kansai@Kyoto 22/52 ブログのスキーマ例 (3) いっそのこと全部埋め込んでしまおう! { "_id" : ObjectId("52440666..."), "title" : " もんごたん楽しい! ", "body" : "MongoDB いいですね!好きです! ", "author" : "Naruhiko Ogasawara", "email" : "naruoga@example.com", "created_at” : ISODate("2014-01-24T06:13:54.240Z") "permalink" : "mongo_tan_is_fun", "comment" : [ { "author" : "Ichiro Tanaka", "email" : "ichiro.tanaka@example.com", "content" : " ぼくもお気に入り! ", }, { "author" : "Taro Yamada", "email" : "taroy@example.com", "content" : " 使い所難しいですけどね。 ", }, ] } Collection: posts JSON においては配列の要素内には 任意の JSON オブジェクトをとれるの で、この中にコメントの情報を直接埋 め込んでしまう( embedded ) ● MongoDB の強力な文書操作機能 により、配列内部にデータを押し込 んでも柔軟に操作可能! ● あれ、 author 正規化しなくていい の? ● 考えてみれば、ユーザー名とかパ スワードのたぐいはブログアプリ側 でセッションで管理しているはずな ので、 DB 側でユニーク性を保証す る必要はない!と割り切れる ● 迷ったら埋め込み文書、が MongoDB 的スキーマ設計 JSON においては配列の要素内には 任意の JSON オブジェクトをとれるの で、この中にコメントの情報を直接埋 め込んでしまう( embedded ) ● MongoDB の強力な文書操作機能 により、配列内部にデータを押し込 んでも柔軟に操作可能! ● あれ、 author 正規化しなくていい の? ● 考えてみれば、ユーザー名とかパ スワードのたぐいはブログアプリ側 でセッションで管理しているはずな ので、 DB 側でユニーク性を保証す る必要はない!と割り切れる ● 迷ったら埋め込み文書、が MongoDB 的スキーマ設計
  • 23. OSC 2014 Kansai@Kyoto 23/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 24. OSC 2014 Kansai@Kyoto 24/52 ●MongoDB の性能の秘密 MongoDB はファイルシステムに展開されているコレ クションを mmap している ローカリティがある READ アクセスについてはオンメモリ でアクセスするので高速 要は「ディスクにスワップアウトできるオンメモリ DB 」 ローカリティが低いアクセスは性能が出ない Storage V. mem P. mem
  • 25. OSC 2014 Kansai@Kyoto 25/52 データアクセスとインデックス MongoDB のデータアクセスはとても素朴 頭から順に舐めているだけ(線形探索)=検索 O(n) ついでにいうとドキュメントの順序は保証されない インデックス あるキーに着目した B-Tree インデックス=検索 O(log n) 検索・ソートに利用可 Doc1 Doc2 Doc3 … DocN update Doc2 (サイズ拡大) Doc1 Doc2Doc3 … DocN(隙間)
  • 26. OSC 2014 Kansai@Kyoto 26/52 インデックス詳細 インデックスはコレクション自体と同じファイル どんどん張っているとデータサイズが肥大化する インデックスを後から張るとデータ量に比例した時 間がかかる(当然) 昇順・降順でインデックスは張れる 複数キーのインデックスも利用可能 db.posts.ensureIndex({created_at:-1, author:1}) 部分的に使うことも可能
  • 27. OSC 2014 Kansai@Kyoto 27/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 28. OSC 2014 Kansai@Kyoto 28/52 レプリカセット基礎 (1) レプリカセット:簡単な仕組みで高可用性を実現 最低 3 台のノードをセットにして動かす アプリケーションに応答するプライマリノードは自動的に 決定される(明示的なマスターノードは存在しない) Secondary 1 Secondary 2Primary Application Driver Read Write Heartbeat Replication Replication
  • 29. OSC 2014 Kansai@Kyoto 29/52 レプリカセット基礎 (2) プライマリノードがダウンした場合 残ったノード間で投票を行い次のプライマリを決める この場合は「どこまでレプリケーションが終わっている か」で決まる Secondary 1 Secondary 2Primary Application Driver Heartbeat ぼくは 5 分前の 処理まで レプリカもらったよ ぼくは 10 分前 までだなぁ
  • 30. OSC 2014 Kansai@Kyoto 30/52 レプリカセット基礎 (3) 選ばれたノードが次のプライマリになる この時点でノードがダウンすると、 1 台では投票ができ ないためレプリカセットがダウンする 1/3 冗長 Primary Secondary 2Primary Application Driver Heartbeat じゃあぼくが プライマリーやるね Replication READ WRITE
  • 31. OSC 2014 Kansai@Kyoto 31/52 レプリカセット基礎 (4) ダウンしていたノードが復活するとセカンダリノード に復帰 ただしダウンタイムが長いと自動復帰は不可 動いているセカンダリノードからリストアするのが無難 Primary Secondary 2Secondary 2 Application Driver Heartbeat Replication READ WRITE
  • 32. OSC 2014 Kansai@Kyoto 32/52 レプリカセット基礎 (5) Heartbeat: ノード間の死活監視 OPLOG: プライマリノードの操作をセカンダリにレプリケーション するために、操作を保存するコレクション 有限サイズのコレクション( Capped collection ) セカンダリが長時間停止していると溢れてレプリカセットが機 能不全を起こす
  • 33. OSC 2014 Kansai@Kyoto 33/52 レプリカセット応用 (1) Arbiter: 投票権のみ持ち、データを持たないノード システム構成のコストを下げることが可能 ただし冗長性は下がる(トレードオフ) Primary Secondary Arbiter
  • 34. OSC 2014 Kansai@Kyoto 34/52 レプリカセット応用 (2) Delayed Node: オペレーションミス対策 レプリケーションを意図的に遅らせたノード オペミスしてデータを失ったときにすぐに Delayed Node から巻き戻せば復帰可能 Primary Secondary Secondary Delayed Secondary 30 分遅れ slaveDelay=1800 priority=0 hidden=true
  • 35. OSC 2014 Kansai@Kyoto 35/52 レプリカセット応用 (3) セカンダリノードに対するアクセス Write Concern データの書き込みがどこまで波及 するまで待つかを設定する値 基本は即座に戻る セカンダリノードの数も指定可 Read Prefence セカンダリノードからの読み込みを 許可してプライマリの負荷を下げる 古い値を掴んでも大丈夫なとき P S S j : 1 w : 2 P S S PRIMARY SECONDARY
  • 36. OSC 2014 Kansai@Kyoto 36/52 レプリカセット応用 (4) Disaster Recovery (災害復旧)対策 データセンタをまたいでレプリカセットを構築することで、 DC がまるごと死んだとしてもサービス提供可能 Primary Secondary Secondary Secondary Secondary Arbiter Datacenter 1 Datacenter 2
  • 37. OSC 2014 Kansai@Kyoto 37/52 レプリカセットの魅力 仕組み自体はとてもシンプル 高可用性を容易に実現できる 高いシステム構成の自由度 DR 対策やバックアップ対策などにも対応可能 水平展開、 DC をまたいだ運用が容易なクラウド時 代にふさわしい仕組み
  • 38. OSC 2014 Kansai@Kyoto 38/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 39. OSC 2014 Kansai@Kyoto 39/52 シャーディングとは sharding: 一般的なデータベース用語 DB 負荷を分散させるためにスケールアウトさせること RDBMS の場合、同時にアクセスする必要のあるデータ は一つのサーバで処理するように注意深く配置する 非常に難しい スケールアップ DBMS DBMS DBMS スケールアウト DBMS DBMS DBMS DBMS DBMS DBMS DBMS DBMS DBMS
  • 40. OSC 2014 Kansai@Kyoto 40/52 MongoDB のオートシャーディング MongoDB はスケールアウト(=シャーディング)で パフォーマンスを稼ぐ戦略 シャーディングを簡単に行う仕組みが組み込まれている =オートシャーディング
  • 41. OSC 2014 Kansai@Kyoto 41/52 オートシャーディングの仕組み (1) シャードキー オートシャーディングの 動作を規定するキー(複 合可) シャードキーの範囲に よってコレクションを塊 (チャンク)に分割する チャンク サイズは 64MB (標準) DB の操作によりサイズ 超過した場合は分割さ れる naruhiko Shard key: username < 64MB akio rakutaro-∞ +∞ Shard 1 A Chunk < 64MB C ChunkChunk < 64MB B
  • 42. OSC 2014 Kansai@Kyoto 42/52 オートシャーディングの仕組み (1) シャードキー オートシャーディングの 動作を規定するキー(複 合可) シャードキーの範囲に よってコレクションを塊 (チャンク)に分割する チャンク サイズは 64MB (標準) DB の操作によりサイズ 超過した場合は分割さ れる naruhiko Shard key: username < 64MB akio rakutaro-∞ +∞ Shard 1 A Chunk < 64MB C ChunkChunk < 64MB B db.foo.insert({username: "osamu", ....})
  • 43. OSC 2014 Kansai@Kyoto 43/52 オートシャーディングの仕組み (1) シャードキー オートシャーディングの 動作を規定するキー(複 合可) シャードキーの範囲に よってコレクションを塊 (チャンク)に分割する チャンク サイズは 64MB (標準) DB の操作によりサイズ 超過した場合は分割さ れる naruhiko Shard key: username < 64MB akio rakutaro-∞ +∞ Shard 1 A Chunk < 64MB C ChunkChunk < 64MB B db.foo.insert({username: "osamu", ....}) naruhiko Shard key: username < 64MB akio rakutaro-∞ +∞ Shard 1 A B から 分割 < 64MB C < 64MB B osamu < 64MB D
  • 44. OSC 2014 Kansai@Kyoto 44/52 オートシャーディングの仕組み (2) リバランシング 各シャードにおいて、最大のチャンク数を持つシャードと 最小のチャンク数を持つシャードの差が規定値を超えた 場合、バランスを取るためチャンクが移動する 新規にシャードを追加した場合も同様にリバランシング が起きる A Shard 1 Shard 2
  • 45. OSC 2014 Kansai@Kyoto 45/52 オートシャーディングの仕組み (2) リバランシング 各シャードにおいて、最大のチャンク数を持つシャードと 最小のチャンク数を持つシャードの差が規定値を超えた 場合、バランスを取るためチャンクが移動する 新規にシャードを追加した場合も同様にリバランシング が起きる A Shard 1 Shard 2 A Shard 1 Shard 2 B
  • 46. OSC 2014 Kansai@Kyoto 46/52 オートシャーディングの仕組み (2) リバランシング 各シャードにおいて、最大のチャンク数を持つシャードと 最小のチャンク数を持つシャードの差が規定値を超えた 場合、バランスを取るためチャンクが移動する 新規にシャードを追加した場合も同様にリバランシング が起きる A Shard 1 Shard 2 A Shard 1 Shard 2 B A Shard 1 Shard 2 B C
  • 47. OSC 2014 Kansai@Kyoto 47/52 オートシャーディングの仕組み (2) リバランシング 各シャードにおいて、最大のチャンク数を持つシャードと 最小のチャンク数を持つシャードの差が規定値を超えた 場合、バランスを取るためチャンクが移動する 新規にシャードを追加した場合も同様にリバランシング が起きる A Shard 1 Shard 2 A Shard 1 Shard 2 B A Shard 1 Shard 2 B C A Shard 1 Shard 2 B C C
  • 48. OSC 2014 Kansai@Kyoto 48/52 シャードキーに求められる性質 適度なランダムネス ある程度チャンク分割が進んだあとは、シャード内にまん べんなくチャンクが分配されるようになること シャードキーの -∞ 〜 +∞ まで概ね均等にデータが配 置されること 適度なローカリティ あるひとまとまりの処理が数個のチャンク内で完結する シャーディングでは mmap がチャンク単位になるため、 うまくいくと各シャードでオンメモリで処理が可能になる
  • 49. OSC 2014 Kansai@Kyoto 49/52 オートシャーディングは万能か? シャードキーをうまく選定できるか?が肝 シャードキーの選定ミスはパフォーマンスの劣化(と、場 合によっては OPLOG 溢れによるデータ喪失)を招く シャードキーは一度決めたら変更は不可能なので、パイ ロットプロジェクトなどで慎重にデータの性質を見極め る必要がある 最初から超大規模なデータを扱うことだけが分かって おり、データの性質が不明確な案件だとリスクがある
  • 50. OSC 2014 Kansai@Kyoto 50/52 内容 MongoDB JP とは NoSQL と MongoDB MongoDB の性質 ドキュメント指向 性能とインデックス レプリカセット オートシャーディング まとめ
  • 51. OSC 2014 Kansai@Kyoto 51/52 まとめ MongoDB はクラウド時代に必要な種々の要素を備 えた、 RDBMS を補完する優れた DB である ただし嵌まりパターンに使った場合 これは MongoDB に限らず NoSQL に共通 アプリケーションを開発しながらスキーマをデザイン していく動的スキーマ シンプルな仕組みで高可用性を実現し、なおかつさ まざまなバリエーションを作れるレプリカセット 同じマシンを並べてパフォーマンスを稼ぐ水平ス ケーリングを支援するオートシャーディング
  • 52. OSC 2014 Kansai@Kyoto 52/52 参考図書 MongoDB イン・アクション http://www.amazon.co.jp/dp/4873115906 Kyle Banker ( 著 ), Sky 株式会社 玉川 竜司 ( 翻訳 ) オライリー・ジャパン データベースエンジニア養成読本 [DB を自由自在 に活用するための知識とノウハウ満載 !] http://www.amazon.co.jp/dp/4774158062 データベースエンジニア養成読本編集部 技術評論社