Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Begining MongoDB
初心者向け
MongoDBのキホン!
渡部 徹太郎2014/03/01
OSC2014Tokyo/Spring
Ver 3.0用に
ちょっと修正
2015/7/15
自己紹介
{"ID" :"fetaro"
"名前" :"渡部 徹太郎"
"経歴" :"学生時代は情報検索の研究(@日本データベース学会)"
"仕事" :{"昔":"証券会社のオントレシステムのWeb基盤",
"今":"オープンソース全般"}
"...
NoSQLの位置づけ
• NoSQLはデータベースの中でも、
スキーマレス&ビックデータが得意で、オンライン操作向け
NoSQL
• MongoDB
• Cassandra
• Couchbase
• Redis
• Neo4j
Hadoop
...
MongoDBの位置づけ(1/3)
• MongoDBはNoSQLの中のドキュメント指向データベース
44
キーバリュー型
Riak, Redis,
memcached,
KVS
RDBMS
MySQL,PostgreSQL,
Oracle,S...
MongoDBの位置づけ(2/3)
• ドキュメント指向データベースとは
o データを階層構造のドキュメント(≒JSON)で扱う
• JSONとは
o ハッシュと配列をネストして使うことができる
o XMLよりシンプルに表現できる。読みやすく直...
MongoDBの位置づけ(3/3)
6
 ドキュメント指向データベースの比較
MongoDB CouchDB Couchbase Server
データ構造 データベース
└コレクション
└ドキュメント
データベース
└ドキュメント
バケット
...
MongoDBの特徴(1/8)
• MongoDBを一言でいうと
o RDBMSとKVSの中間
o MongoDBの特徴
7
水平分散 スキーマレス
多機能
リッチなデータ
レプリケーション 使いやすい柔軟なクエリ
KVSと
比較して
RDBM...
MongoDBの特徴(2/8)
• .
o JSON(階層型データ)は、Key-Valueに比べて、リッチなデータモ
デル
o このようにKey-Valueで1対多を表現しようとすると、key名に"-
1"等の配列の番号を持たせなければならず非...
MongoDBの特徴(3/8)
• .
o 表現力豊かなクエリ
 SQLの文法に似せたクエリが扱いやすい。
 動的に作成可能。事前に定義不要。
 単純な条件検索だけでなく、集計等の高度なクエリも書ける。
o RDBMS以上に強力なインデッ...
MongoDBの特徴(4/8)
• .
o 水平分散(シャーディング)が簡単
 キーによってデータをノードに分散することができる。また、
ノードを動的に追加し、データの自動バランシング機能もあ
る。
10
範囲 0-9 範囲10-19 範囲2...
ドキュメント
MongoDBの特徴(5/8)
•
o 複製(レプリケーション)が簡単
 簡単なコマンドで、レプリケーションを構築可能。
 シャーディングと組み合わせることも可能
 MongoDBドライバが自動的に書き込み先を切り替えるため...
MongoDBの特徴(6/8)
o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
12
マシン2
マシン3
マシン1プライマリ
データ1
セカンダリ
データ1
セカンダリ
データ1
レプリカセット
セカンダリ
データ2...
MongoDBの特徴(6/8)
o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
13
マシン2
マシン3
マシン1プライマリ
データ1
セカンダリ
データ1
セカンダリ
データ1
レプリカセット
セカンダリ
データ2...
MongoDBの特徴(7/8)
•
o スキーマレスデータを扱える
o テーブル定義など無しに、すぐにデータをCRUDできる
•
o セットアップが非常に簡単
 OS毎にバイナリがあるため、ライブラリの追加インストール不要。
 起動までわず...
MongoDBの特徴(8/8)
•
15
機能 説明 ユースケース
機能 GridFS 大容量ファイル(16M以上)を扱うことができる。
大容量ファイルをドキュメントに分割して格納し、
アプリケーションには等価的なAPIを提供。
大容量ファイル...
MongoDB 2.xとMongoDB 3.0の違い
• アプリケーションからのインターフェースは変更なし
• 大きな変更点はストレージエンジン(データ永続化部分)。
MongoDB 3.0では新しいWiredTigerと古いmmapベース
が...
使ってみよう
• コマンドメモ
# インストール
# ダウンロードページ
http://www.mongodb.org/downloads
wget https://fastdl.mongodb.org/linux/mongodb-linux-...
プログラミング言語から使う場合
• mongoshellと同じ使い勝手です
• rubyの例
18
MongoDBを使う上での注意点
• トランザクションが無い
o MongoDBが複数のドキュメントを一貫性をもって更新する事ができな
い
o ミッションクリティカルで複数のテーブルの更新を保証しなければな
らないようなシステムでは、利用しては...
MongoDBの使いどころ
• 使いどころ、ユースケースしては「がっつりMongoDB事例紹介」の方を参
照ください。
• http://www.slideshare.net/tetsutarowatanabe/mongodb-32964238...
MongoDB JP ”日本MongoDBユーザ会”
• ホームページ
o MongoDB JP. http://www.mongodb.jp/mongo/main
• メーリングリスト
o google group 名「MongoDB JP」...
Upcoming SlideShare
Loading in …5
×

初心者向けMongoDBのキホン!

31,866 views

Published on

初心者向けにMongoDBの基本を解説しています。
この資料は2014/3/1のOSC 2014 Tokyo/Springで発表しました 。
2015/3/3最新の情報で一部アップデートしました。
2015/7/15MongoDB ver3.0ようにちょっと修正しました。

Published in: Technology
  • Be the first to comment

初心者向けMongoDBのキホン!

  1. 1. Begining MongoDB 初心者向け MongoDBのキホン! 渡部 徹太郎2014/03/01 OSC2014Tokyo/Spring Ver 3.0用に ちょっと修正 2015/7/15
  2. 2. 自己紹介 {"ID" :"fetaro" "名前" :"渡部 徹太郎" "経歴" :"学生時代は情報検索の研究(@日本データベース学会)" "仕事" :{"昔":"証券会社のオントレシステムのWeb基盤", "今":"オープンソース全般"} "特技":["サーバ基盤","Linux","KVM","ruby","MongoDB"] "エディタ":"emacs派" "趣味":"自宅サーバ" "MongoDB関連":{ -"3年前に、友人の結婚式用のアプリを作った時に利用" -"技評記事「MongoDBでゆるふわDB体験」" -"日経SYSTEMS 8月号 「ドキュメント指向データベース」" } } 2
  3. 3. 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 オンラインで データ操作 バッチで 分析・集計 スキーマあり&非ビックデー タ スキーマレス & ビックデータ
  4. 4. 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
  5. 5. 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 } ] } 配列 ハッシュの配列 キーと値 ハッシュ
  6. 6. MongoDBの位置づけ(3/3) 6  ドキュメント指向データベースの比較 MongoDB CouchDB Couchbase Server データ構造 データベース └コレクション └ドキュメント データベース └ドキュメント バケット └ドキュメント インデックスの 生成 インデックスを張りたいキーを指定 する MapReduce関数を用いたビューを作成することで対 応 クエリー 動的クエリ。SQLライクな記述が 可能。 基本的なCRUD以外は、静的クエリ。上記 MapReduceで作成したビューへのアクセスがクエリ にあたる。 主なインター フェース 独自プロトコル。各言語用専用ドラ イバを利用。 REST(HTTP) memcachedプロトコル レプリケーショ ン シングルマスタ型レプリケーション (1ノードにしか書き込めない) マルチマスタ型レプリケーション (複数ノードに書き込める) 開発言語 C++ Erlang C,C++,Erlang
  7. 7. MongoDBの特徴(1/8) • MongoDBを一言でいうと o RDBMSとKVSの中間 o MongoDBの特徴 7 水平分散 スキーマレス 多機能 リッチなデータ レプリケーション 使いやすい柔軟なクエリ KVSと 比較して RDBMSと 比較して MongoDBならでは 機能数 スケーラビリティ 水平分散能力 KVS RDBMS MongoDB 水平分散できて、 機能も多い
  8. 8. 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
  9. 9. MongoDBの特徴(3/8) • . o 表現力豊かなクエリ  SQLの文法に似せたクエリが扱いやすい。  動的に作成可能。事前に定義不要。  単純な条件検索だけでなく、集計等の高度なクエリも書ける。 o RDBMS以上に強力なインデックス  セカンダリインデックス:主キー以外でインデックスを作成可能  複合キーインデックス:複数のキーでインデックスを作成可能  マルチキーインデックス:配列の要素に対してインデックス作成可 能 9 db.person.find( {"name":"watanabe","age": 30 } ).limit(3) 例)コレクションpersonに、“name”が“watanabe”で、 “age”が30のドキュメントを3つだけ取得したい 柔軟なクエリ
  10. 10. MongoDBの特徴(4/8) • . o 水平分散(シャーディング)が簡単  キーによってデータをノードに分散することができる。また、 ノードを動的に追加し、データの自動バランシング機能もあ る。 10 範囲 0-9 範囲10-19 範囲20- x ドキュメント チャン ク アプリケーション mongosルータ 1 4 9 11 16 20 27 MongoDB ドライバ 23 23 クエリを適切な ノードに分散 シャードキーで 分散 ノード ノード ノード シャードキー 水平分散
  11. 11. ドキュメント 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ドライバ 書き込み 読み込み読み込み プライマリが障 害になったら、 プライマリノード を選出し、自動 フェイルオーバ レプリカセット レプリケーション
  12. 12. MongoDBの特徴(6/8) o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立 12 マシン2 マシン3 マシン1プライマリ データ1 セカンダリ データ1 セカンダリ データ1 レプリカセット セカンダリ データ2 プライマリ データ2 セカンダリ データ2 レプリカセッ ト セカンダリ データ3 セカンダリ データ3 プライマリ データ3 レプリカセット mongosルータ 負荷分散 冗 長 化 アプリケーション
  13. 13. MongoDBの特徴(6/8) o レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立 13 マシン2 マシン3 マシン1プライマリ データ1 セカンダリ データ1 セカンダリ データ1 レプリカセット セカンダリ データ2 プライマリ データ2 セカンダリ データ2 レプリカセッ ト セカンダリ データ3 セカンダリ データ3 プライマリ データ3 レプリカセット mongosルータ アプリケーション
  14. 14. MongoDBの特徴(7/8) • o スキーマレスデータを扱える o テーブル定義など無しに、すぐにデータをCRUDできる • o セットアップが非常に簡単  OS毎にバイナリがあるため、ライブラリの追加インストール不要。  起動までわずか3ステップ。 • OS毎のバイナリをダウンロード • データディレクトリを作成 • 起動 o RDBMSを使っていた人が使いやすいように作られている  データベース>テーブル(コレクション)>ドキュメント というデータ構造  SQLとMongoクエリ言語は大部分マッピング可能  インデックスもSQLと同じような宣言ができる o 豊富なドキュメント・ノウハウ  英語ではあるが公式ドキュメントは他のNOSQLに比べても豊富  多くの人が使っているため、ノウハウが豊富。日本語のノウハウも多い。 14 使いやすい スキーマレス
  15. 15. 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により、座標に近 い点を検索
  16. 16. 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から与えられるだけ使う ○ 肥大化するドキュメントの 扱い × ドキュメントが肥大化する と、物理的な移動が必要 △ アルゴリズムの変更によ り、以前ほど発生しなく なった ○ 肥大化しても移動は発生 しない
  17. 17. 使ってみよう • コマンドメモ # インストール # ダウンロードページ 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
  18. 18. プログラミング言語から使う場合 • mongoshellと同じ使い勝手です • rubyの例 18
  19. 19. MongoDBを使う上での注意点 • トランザクションが無い o MongoDBが複数のドキュメントを一貫性をもって更新する事ができな い o ミッションクリティカルで複数のテーブルの更新を保証しなければな らないようなシステムでは、利用してはならない。 • 外部キー・結合が無い o 他のドキュメントへの参照はアプリケーションで実装する必要がある。 o 当然ながら、外部キー制約もないため、テーブル間の整合性が重要な システムには向いていない。 o 複数のドキュメントの内容を結合して取得することはできない。 • スキーマが無い o どのようなキー名でデータが入っているかわからない。データ型もわ からない。 o データ登録間違えの際にエラーが発生しない。 o 設計書を厳格に管理しないと、どのようなデータが入っているかわか らなくなり、保守性の低下を招く恐れがある。 19
  20. 20. MongoDBの使いどころ • 使いどころ、ユースケースしては「がっつりMongoDB事例紹介」の方を参 照ください。 • http://www.slideshare.net/tetsutarowatanabe/mongodb-32964238 20
  21. 21. 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

×