MongoDBざっくり解説
          ∼「はじめてのMongoDB」を初めて読む方々へ∼




11年12月8日木曜日
自己紹介

          Name:本間 知教(ほんま とものり)
          Twitter:@CkReal
          経歴
              2008年4月∼2011年9月

               国内某ITコンサルティング会社:インフラ担当

              2011年9月∼

               株式会社gumi:インフラand解析チーム

               今週から正社員になりました^^;

          好きなMongoDBの機能:Replica Sets

                                  2
11年12月8日木曜日
はじめに




                                           はじめての


                                                 @doryokujin
                                           日本UNIXユーザ会 勉強会 2011/09/15


                                  http://www.slideshare.net/doryokujin/
              @doryokujinさん                mongodb-9208855


                              3
11年12月8日木曜日
はじめに

          @doryokujinさんはMongoSV出席のため渡米中




                       4
11年12月8日木曜日
発表の目的

          MongoDB人口の増加
              MongoDBの(最低限の)機能紹介

              MongoDBの公式ドキュメントや@doryokujin さん
              の各種資料への誘導

          mongotokyoの登壇者募集
              来年は女性MongoDBエンジニアにも登壇を!




                           5
11年12月8日木曜日
アジェンダ

       1.MongoDBの概要
       2.MongoDBの機能
       3.MongoDBを始めてみる方へ




                      6
11年12月8日木曜日
1.MongoDBの概要




                   7
11年12月8日木曜日
MongoDBの概要
          ドキュメント指向データベース
              JSONでドキュメントを扱う(内部はBSON)

          実装:C++
          開発元:10gen http://www.10gen.com/
          最新版:2.0.1
          ライセンス
              Database: GNU AGPL v3.0 License

              Driver:   Apache License v2.0

          OS:Linux,Mac,Windows,Solaris
          Driver: C , C++, Python, Java, Ruby, PHP, Perl,etc…

                                              8
11年12月8日木曜日
MongoDBの導入事例

          世界中で利用されつつあるデータベース
              解析用途だけではなく、Webサービスでも使われる

              海外の事例




              国内の事例



                        9
11年12月8日木曜日
Mongo Tokyo 2012

          1月18日品川でカンファレンスが開催されます
              12月18日まではEarly Bird料金で参加可能!!




    http://www.10gen.com/events/mongo-tokyo-2012        今年のMongoDB勉強会の様子
                                                   10
11年12月8日木曜日
2.MongoDBの機能




                   11
11年12月8日木曜日
データの保存&検索

          通常のRDBとは、用語が異なる

          RDB               データベース                 テーブル                レコード                   カラム

       MongoDB              データベース コレクション ドキュメント                                         フィールド


                                           MongoDB Server
                           Database                                           Database
              Collection              Collection                 Collection              Collection

      Document      Document    Document    Document        Document   Document    Document    Document


      Document      Document    Document    Document        Document   Document    Document    Document



                                                       12
11年12月8日木曜日
データの保存&検索

          スキーマレス
              カラム追加・削除の手間がない

   # mongo
   > use hoge
   > db.piyo.save({fuga:1})
   > show dbs
   hoge 0.203125GB
   > db.piyo.find()
   { "_id" : ObjectId("4ec5fd452d9d5991cd323c20"), "fuga" : 1 }
                                13
11年12月8日木曜日
データの保存&検索

          トランザクションやJOINがない
              パフォーマンスとスケーラビリティを優先

               挿入・検索速度:MySQL<MongoDB<KVS

          ディスクへの書き込みは非同期
              ジャーナリング機能(v1.8~)の使用を推奨

          インデックスサポート
              あらゆる属性でインデックスを貼れる

                             14
11年12月8日木曜日
ドキュメント例(gumiの場合)
    MongoDBへ格納するドキュメントは、ユーザ/時のアクション状況で格納
    例)MongoDB格納後のログ(一部整形&省略)
       "_id" : "df41b04eb72d29b4a30955f2de1a20134e187cd6f59f0d3df0468d22",
       "app" : "hogehoge",
       "userid" : "12345",
       "dateint" : 20111101,
       "hourint" : 23,                                    ユーザIDごとに、
       "actions" : [
                                                      アクションレコードを格納
            "CONSUME_POWER",
            "ADD_MONEY"
       ],                                            時刻フィールドを利用して、
       "records" : [                                MongoDBのShardingキーとする
          {
             "action" : "ADD_MONEY",
             "timeint" : 235959,                     ユーザごとの各アクションを
          }                                                 配列として格納
       ]
                                        15
11年12月8日木曜日
MongoDBを運用する

          Replica Sets
              更新はPrimary,参照はSecondary

              自動フェイルオーバー機能を持つ

                          自動フェイルオーバーの流れ


                         同期     Primary     同期



                    Secondary             Secondary


                                  16
11年12月8日木曜日
MongoDBを運用する

          Replica Sets
              更新はPrimary,参照はSecondary

              自動フェイルオーバー機能を持つ

                         自動フェイルオーバーの流れ


                                Primary


                                 選出
                    Secondary             Secondary


                                  17
11年12月8日木曜日
MongoDBを運用する

          Replica Sets
              更新はPrimary,参照はSecondary

              自動フェイルオーバー機能を持つ

                         自動フェイルオーバーの流れ


                               Recovering


                                 同期
                     Primary                Secondary


                                   18
11年12月8日木曜日
MongoDBを運用する

          Replica Sets
              更新はPrimary,参照はSecondary

              自動フェイルオーバー機能を持つ

                          自動フェイルオーバーの流れ


                               Secondary
                         同期

                                 同期
                     Primary               Secondary


                                  19
11年12月8日木曜日
MongoDBを運用する

          Mongo Sharding
              Auto-balancing機能を持つ

              Sharding Keyに基づき、コレクションを分割

              Shardingは、3種類のサーバで構成される

               mongos,config,mongod

              Migrationは、Chunk単位で行われる

               document単位ではないことに注意

                                     20
11年12月8日木曜日
MongoDBを運用する

          Mongo Sharding
              mongos経由で、mongodのドキュメントを操作する

    各Shardに関する
  (永続的な)情報を保持


                                実際のドキュメントは、
                                 mongodに格納される

                                クライアントのアクセス
                                は、mongosに対して行う

                           21
11年12月8日木曜日
MongoDBを運用する

          Mongo Shardingの注意点
              Shard KeyはCollection内のどれか1つから選択

              各Shardは、重複しないレンジで分割される

               例)Shard1:0~10, Shard1:11~20, Shard2:21~30…

              分散させやすいKeyを選ぶことが重要

               良い例:ユーザ名,時刻,検索頻度が多いキーなど

               悪い例:大陸名,単純増加のIDなど


                                     22
11年12月8日木曜日
MongoDBを運用する

          Auto-balancingの注意点
               Migration中は、2重にカウントされる

               Auto-balancingはOFFにしておける。
         Shard1                 Shard2                      Shard1                 Shard2
       DatabaseA              DatabaseA                   DatabaseA              DatabaseA
        CollectionA            CollectionA                 CollectionA            CollectionA

    Document   Document    Document   Document         Document   Document    Document   Document

    Document   Document    Document   Document         Document   Document    Document   Document

    Document    Document   Document    Document        Document    Document   Document    Document

    Document    Document                               Document    Document   Document    Document

    Document    Document



      Shardの偏り                                               Migration(Chunk単位で実施)
                                                  23
11年12月8日木曜日
その他

          その他にも機能やTipsがたくさん
              Capped Collection,Map Reduce,GridFS…

              クエリチューニング

          参考文献
              NoSQLデータベースファーストガイド

              MongoDB JPの各種資料

              @doryokujinさんのブログ

                                 24
11年12月8日木曜日
3. MongoDBを始めてみる方へ




               25
11年12月8日木曜日
MongoDBの構築メモ

          MongoDBを動かすのはすごく簡単
              Macでもmac ports,homebrewなどですぐに入る

          様々なログ形式を突っ込めるストレージDB
              挿入・検索速度>一貫性

              データ設計が柔軟に行えるDB

          MongoDBのクエリは豊富
              コマンドを忘れたら、help()で確認

                              26
11年12月8日木曜日
MongoDBの運用メモ

              実運用には十分耐えられる
               約1000万件での検索時間は平均0.066sec

              監視用ツール類も充実
               munin,Ganglia,cacti,ZABBIX,Nagios

              MongoDBを検討する際は、検証期間を取る
               Sharding環境には慣れが必要

               configデータベース内の統計値なども見ておく

                                  27
11年12月8日木曜日
MongoDB勉強会
                     &
              ソースコードリーディング勉強会
 での出席(and登壇)お待ちしております!!



                     28
11年12月8日木曜日
ご清聴ありがとうございました。




                    29
11年12月8日木曜日

MongoDBざっくり解説

  • 1.
    MongoDBざっくり解説 ∼「はじめてのMongoDB」を初めて読む方々へ∼ 11年12月8日木曜日
  • 2.
    自己紹介 Name:本間 知教(ほんま とものり) Twitter:@CkReal 経歴 2008年4月∼2011年9月 国内某ITコンサルティング会社:インフラ担当 2011年9月∼ 株式会社gumi:インフラand解析チーム 今週から正社員になりました^^; 好きなMongoDBの機能:Replica Sets 2 11年12月8日木曜日
  • 3.
    はじめに はじめての @doryokujin 日本UNIXユーザ会 勉強会 2011/09/15 http://www.slideshare.net/doryokujin/ @doryokujinさん mongodb-9208855 3 11年12月8日木曜日
  • 4.
    はじめに @doryokujinさんはMongoSV出席のため渡米中 4 11年12月8日木曜日
  • 5.
    発表の目的 MongoDB人口の増加 MongoDBの(最低限の)機能紹介 MongoDBの公式ドキュメントや@doryokujin さん の各種資料への誘導 mongotokyoの登壇者募集 来年は女性MongoDBエンジニアにも登壇を! 5 11年12月8日木曜日
  • 6.
    アジェンダ 1.MongoDBの概要 2.MongoDBの機能 3.MongoDBを始めてみる方へ 6 11年12月8日木曜日
  • 7.
    1.MongoDBの概要 7 11年12月8日木曜日
  • 8.
    MongoDBの概要 ドキュメント指向データベース JSONでドキュメントを扱う(内部はBSON) 実装:C++ 開発元:10gen http://www.10gen.com/ 最新版:2.0.1 ライセンス Database: GNU AGPL v3.0 License Driver: Apache License v2.0 OS:Linux,Mac,Windows,Solaris Driver: C , C++, Python, Java, Ruby, PHP, Perl,etc… 8 11年12月8日木曜日
  • 9.
    MongoDBの導入事例 世界中で利用されつつあるデータベース 解析用途だけではなく、Webサービスでも使われる 海外の事例 国内の事例 9 11年12月8日木曜日
  • 10.
    Mongo Tokyo 2012 1月18日品川でカンファレンスが開催されます 12月18日まではEarly Bird料金で参加可能!! http://www.10gen.com/events/mongo-tokyo-2012 今年のMongoDB勉強会の様子 10 11年12月8日木曜日
  • 11.
    2.MongoDBの機能 11 11年12月8日木曜日
  • 12.
    データの保存&検索 通常のRDBとは、用語が異なる RDB データベース テーブル レコード カラム MongoDB データベース コレクション ドキュメント フィールド MongoDB Server Database Database Collection Collection Collection Collection Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document 12 11年12月8日木曜日
  • 13.
    データの保存&検索 スキーマレス カラム追加・削除の手間がない # mongo > use hoge > db.piyo.save({fuga:1}) > show dbs hoge 0.203125GB > db.piyo.find() { "_id" : ObjectId("4ec5fd452d9d5991cd323c20"), "fuga" : 1 } 13 11年12月8日木曜日
  • 14.
    データの保存&検索 トランザクションやJOINがない パフォーマンスとスケーラビリティを優先 挿入・検索速度:MySQL<MongoDB<KVS ディスクへの書き込みは非同期 ジャーナリング機能(v1.8~)の使用を推奨 インデックスサポート あらゆる属性でインデックスを貼れる 14 11年12月8日木曜日
  • 15.
    ドキュメント例(gumiの場合) MongoDBへ格納するドキュメントは、ユーザ/時のアクション状況で格納 例)MongoDB格納後のログ(一部整形&省略) "_id" : "df41b04eb72d29b4a30955f2de1a20134e187cd6f59f0d3df0468d22", "app" : "hogehoge", "userid" : "12345", "dateint" : 20111101, "hourint" : 23, ユーザIDごとに、 "actions" : [ アクションレコードを格納 "CONSUME_POWER", "ADD_MONEY" ], 時刻フィールドを利用して、 "records" : [ MongoDBのShardingキーとする { "action" : "ADD_MONEY", "timeint" : 235959, ユーザごとの各アクションを } 配列として格納 ] 15 11年12月8日木曜日
  • 16.
    MongoDBを運用する Replica Sets 更新はPrimary,参照はSecondary 自動フェイルオーバー機能を持つ 自動フェイルオーバーの流れ 同期 Primary 同期 Secondary Secondary 16 11年12月8日木曜日
  • 17.
    MongoDBを運用する Replica Sets 更新はPrimary,参照はSecondary 自動フェイルオーバー機能を持つ 自動フェイルオーバーの流れ Primary 選出 Secondary Secondary 17 11年12月8日木曜日
  • 18.
    MongoDBを運用する Replica Sets 更新はPrimary,参照はSecondary 自動フェイルオーバー機能を持つ 自動フェイルオーバーの流れ Recovering 同期 Primary Secondary 18 11年12月8日木曜日
  • 19.
    MongoDBを運用する Replica Sets 更新はPrimary,参照はSecondary 自動フェイルオーバー機能を持つ 自動フェイルオーバーの流れ Secondary 同期 同期 Primary Secondary 19 11年12月8日木曜日
  • 20.
    MongoDBを運用する Mongo Sharding Auto-balancing機能を持つ Sharding Keyに基づき、コレクションを分割 Shardingは、3種類のサーバで構成される mongos,config,mongod Migrationは、Chunk単位で行われる document単位ではないことに注意 20 11年12月8日木曜日
  • 21.
    MongoDBを運用する Mongo Sharding mongos経由で、mongodのドキュメントを操作する 各Shardに関する (永続的な)情報を保持 実際のドキュメントは、 mongodに格納される クライアントのアクセス は、mongosに対して行う 21 11年12月8日木曜日
  • 22.
    MongoDBを運用する Mongo Shardingの注意点 Shard KeyはCollection内のどれか1つから選択 各Shardは、重複しないレンジで分割される 例)Shard1:0~10, Shard1:11~20, Shard2:21~30… 分散させやすいKeyを選ぶことが重要 良い例:ユーザ名,時刻,検索頻度が多いキーなど 悪い例:大陸名,単純増加のIDなど 22 11年12月8日木曜日
  • 23.
    MongoDBを運用する Auto-balancingの注意点 Migration中は、2重にカウントされる Auto-balancingはOFFにしておける。 Shard1 Shard2 Shard1 Shard2 DatabaseA DatabaseA DatabaseA DatabaseA CollectionA CollectionA CollectionA CollectionA Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Document Shardの偏り Migration(Chunk単位で実施) 23 11年12月8日木曜日
  • 24.
    その他 その他にも機能やTipsがたくさん Capped Collection,Map Reduce,GridFS… クエリチューニング 参考文献 NoSQLデータベースファーストガイド MongoDB JPの各種資料 @doryokujinさんのブログ 24 11年12月8日木曜日
  • 25.
    3. MongoDBを始めてみる方へ 25 11年12月8日木曜日
  • 26.
    MongoDBの構築メモ MongoDBを動かすのはすごく簡単 Macでもmac ports,homebrewなどですぐに入る 様々なログ形式を突っ込めるストレージDB 挿入・検索速度>一貫性 データ設計が柔軟に行えるDB MongoDBのクエリは豊富 コマンドを忘れたら、help()で確認 26 11年12月8日木曜日
  • 27.
    MongoDBの運用メモ 実運用には十分耐えられる 約1000万件での検索時間は平均0.066sec 監視用ツール類も充実 munin,Ganglia,cacti,ZABBIX,Nagios MongoDBを検討する際は、検証期間を取る Sharding環境には慣れが必要 configデータベース内の統計値なども見ておく 27 11年12月8日木曜日
  • 28.
    MongoDB勉強会 & ソースコードリーディング勉強会 での出席(and登壇)お待ちしております!! 28 11年12月8日木曜日
  • 29.