MongoDB



                   Masakazu Matsushita
                           @matsukaz
2011   7   28
•              @matsukaz

                •
                • Ameba Pico
                • DevLOVE
2011   7   28
2011   7   28
Ameba Pico
       •
       • 2010   3




2011   7   28
(2011   7   )

       •             390    MAU 60

       • 10     20

       •        3:7

       •
2011   7   28
2011   7   28
• MongoDB
                • Ameba Pico
                • MongoDB
2011   7   28
MongoDB


2011   7   28
Document-oriented storage
       •
       • BSON                       (Binary JSON)
                > db.users.save( { name : "hoge", age : 20 } )
                > db.users.save( { name : "fuga" } )

                > db.users.find()
                { "_id" : ObjectId("4d6b7ef5934c0000000053a4"),
                      "name" : "hoge", "age" : 20 }
                { "_id" : ObjectId("4d6b7f06934c0000000053a5"),
                      "name" : "fuga" }
2011   7   28
Full Index Support
       •
                Index

       • Unique Index         Index




2011   7   28
Replication
       • ReplicaSet
                                mongod
                               Member 1
                              (PRIMARY)




                    mongod                    mongod
                   Member 2                  Member 3
                (SECONDARY)               (SECONDARY)




2011   7   28
Replication
       • ReplicaSet
                              mongod
                             Member 1
                             (DOWN)




                   mongod                   mongod
                  Member 2                 Member 3
                 (PRIMARY)              (SECONDARY)




2011   7   28
Replication
       • ReplicaSet
                                 mongod
                                Member 1
                             (RECOVERING)




                   mongod                       mongod
                  Member 2                     Member 3
                 (PRIMARY)                  (SECONDARY)




2011   7   28
Replication
       • ReplicaSet
                                 mongod
                                Member 1
                             (SECONDARY)




                   mongod                      mongod
                  Member 2                    Member 3
                 (PRIMARY)                 (SECONDARY)




2011   7   28
Auto-Sharding
       •                            Shard Key
                Shard 1

                 users

                   name1    name2    name3

                   name4    name5    name6

                   name7    name8    name9


                 items
                    item1   item2    item3



2011   7   28
Auto-Sharding
       •                            Shard Key
                Shard 1                         Shard 2

                 users

                   name1    name2    name3

                   name4    name5    name6

                   name7    name8    name9


                 items
                    item1   item2    item3



2011   7   28
Auto-Sharding
       •                            Shard Key
                Shard 1                         Shard 2

                 users                           users

                   name1    name2    name3         name7   name8    name9

                   name4    name5    name6

                   name7    name8    name9


                 items
                    item1   item2    item3                             Chunk
                                             (Shard Key            Range)
2011   7   28
Auto-Sharding
       •                               Shard Key
                Shard 1                                  Shard 2

                 users                                    users

                   name1       name2    name3               name7    name8     name9

                   name4       name5    name6


                 items                                    mongos
                    item1      item2    item3



                     client
                      client                    mongos                       mongoc
                                                             Shard
2011   7   28
Ameba Pico



2011   7   28
2011            1                               Shard 1
                                                                                         mongoc
                                                          mongos
                                                          mongod         mongod          mongod

                                                Shard 2
   Web                     Socket                         mongos                         mongoc
                                                          mongod         mongod          mongod

                                                Shard 3
                                                          mongos                         mongoc
                                                          mongod         mongod          mongod
                           (memcached)




     LB             ID/Point/
  (HAProxy)                          MySQL
EC2
           m2.2xlarge (Mem 34.2GB / 13 EC2CU)
           c1.xlarge (Mem 7GB / 20 EC2CU)
           m1.large (Mem 7.5GB / 4 EC2CU)
           c1.medium (Mem 1.7GB / 5 EC2CU)
           m1.small (Mem 1.7GB / 1 EC2CU)        EBS      S3       CloudFront     Elastic MapReduce
2011   7   28
2011            3                               Shard 1
                                                                                         mongoc
                                                          mongos
                                                          mongod         mongod          mongod

                                                Shard 2
   Web                     Socket                         mongos                         mongoc
                                                          mongod         mongod          mongod

                                                Shard 3
                                                          mongos                         mongoc
                                                          mongod         mongod          mongod
                           (memcached)
                                                Shard 4
                                                          mongos
                                                          mongod         mongod          mongod

     LB             ID/Point/
  (HAProxy)                          MySQL
EC2
           m2.2xlarge (Mem 34.2GB / 13 EC2CU)
           c1.xlarge (Mem 7GB / 20 EC2CU)
           m1.large (Mem 7.5GB / 4 EC2CU)
           c1.medium (Mem 1.7GB / 5 EC2CU)
           m1.small (Mem 1.7GB / 1 EC2CU)        EBS      S3       CloudFront     Elastic MapReduce
2011   7   28
2011            5                               Shard 1
                                                                                         mongoc
                                                          mongos
                                                          mongod         mongod          mongod

                                                Shard 2
   Web                     Socket                         mongos                         mongoc
                                                          mongod         mongod          mongod

                                                Shard 3
                                                          mongos                         mongoc
                                                          mongod         mongod          mongod
                           (memcached)
                                                Shard 4
                                                          mongos
                                                          mongod         mongod          mongod

     LB             ID/Point/                   Shard 5
  (HAProxy)                          MySQL
                                                          mongod         mongod          mongod
EC2
           m2.2xlarge (Mem 34.2GB / 13 EC2CU)   Shard 6
           c1.xlarge (Mem 7GB / 20 EC2CU)
           m1.large (Mem 7.5GB / 4 EC2CU)                 mongod         mongod          mongod
           c1.medium (Mem 1.7GB / 5 EC2CU)
           m1.small (Mem 1.7GB / 1 EC2CU)        EBS      S3       CloudFront     Elastic MapReduce
2011   7   28
2011            7                                Shard 1
                                                                                          mongoc
                                                           mongod         mongod          mongod

           mongos               mongos           Shard 2
   Web                     Socket                                                         mongoc
                                                           mongod         mongod          mongod

                                                 Shard 3
           mongos                                                                         mongoc
                                                           mongod         mongod          mongod
                           (memcached)
                                                 Shard 4

                                                           mongod         mongod          mongod

     LB             ID/Point/                    Shard 5
  (HAProxy)                              MySQL
                                                           mongod         mongod          mongod
EC2
           m2.2xlarge (Mem 34.2GB / 13 EC2CU)    Shard 6
           c1.xlarge (Mem 7GB / 20 EC2CU)
           m1.large (Mem 7.5GB / 4 EC2CU)                  mongod         mongod          mongod
           c1.medium (Mem 1.7GB / 5 EC2CU)
           m1.small (Mem 1.7GB / 1 EC2CU)         EBS      S3       CloudFront     Elastic MapReduce
2011   7   28
MongoDB



2011   7   28
2011 2


2011   7   28
2011   7   28
2011   7   28
mongod
                Repair

2011   7   28
2011   7   28
2011   7   28
2011 3


2011   7   28
Shard

2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28
http://www.flickr.com/photos/andreasmarx/190619661/
2011   7   28
6



2011   7   28
2011 5


2011   7   28
Shard
                2

2011   7   28
OFF

2011   7   28
MongoDB

2011   7   28
2011   7   28
2011   7   28
2011   7   28
2   Shard



2011   7   28
2011   7   28
2011   7   28
2011 6


2011   7   28
mongos

2011   7   28
2011   7   28
2011 7


2011   7   28
MongoDB


                1.6.5 → 1.8.2

2011   7   28
2011   7   28
2011   7   28
chunk


                    chunk

2011   7   28
http://www.flickr.com/photos/madhorse5/415958992/
2011   7   28
2011   7   28
4   Shard



2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28
Shard 2
       EC2


2011   7   28
30
       Repair

2011   7   28
2011   7   28
mongod
                1

2011   7   28
2011   7   28
2011   7   28
2011   7   28
2011   7   28

Mongo DBを半年運用してみた

  • 1.
    MongoDB Masakazu Matsushita @matsukaz 2011 7 28
  • 2.
    @matsukaz • • Ameba Pico • DevLOVE 2011 7 28
  • 3.
    2011 7 28
  • 4.
    Ameba Pico • • 2010 3 2011 7 28
  • 5.
    (2011 7 ) • 390 MAU 60 • 10 20 • 3:7 • 2011 7 28
  • 6.
    2011 7 28
  • 7.
    • MongoDB • Ameba Pico • MongoDB 2011 7 28
  • 8.
  • 9.
    Document-oriented storage • • BSON (Binary JSON) > db.users.save( { name : "hoge", age : 20 } ) > db.users.save( { name : "fuga" } ) > db.users.find() { "_id" : ObjectId("4d6b7ef5934c0000000053a4"), "name" : "hoge", "age" : 20 } { "_id" : ObjectId("4d6b7f06934c0000000053a5"), "name" : "fuga" } 2011 7 28
  • 10.
    Full Index Support • Index • Unique Index Index 2011 7 28
  • 11.
    Replication • ReplicaSet mongod Member 1 (PRIMARY) mongod mongod Member 2 Member 3 (SECONDARY) (SECONDARY) 2011 7 28
  • 12.
    Replication • ReplicaSet mongod Member 1 (DOWN) mongod mongod Member 2 Member 3 (PRIMARY) (SECONDARY) 2011 7 28
  • 13.
    Replication • ReplicaSet mongod Member 1 (RECOVERING) mongod mongod Member 2 Member 3 (PRIMARY) (SECONDARY) 2011 7 28
  • 14.
    Replication • ReplicaSet mongod Member 1 (SECONDARY) mongod mongod Member 2 Member 3 (PRIMARY) (SECONDARY) 2011 7 28
  • 15.
    Auto-Sharding • Shard Key Shard 1 users name1 name2 name3 name4 name5 name6 name7 name8 name9 items item1 item2 item3 2011 7 28
  • 16.
    Auto-Sharding • Shard Key Shard 1 Shard 2 users name1 name2 name3 name4 name5 name6 name7 name8 name9 items item1 item2 item3 2011 7 28
  • 17.
    Auto-Sharding • Shard Key Shard 1 Shard 2 users users name1 name2 name3 name7 name8 name9 name4 name5 name6 name7 name8 name9 items item1 item2 item3 Chunk (Shard Key Range) 2011 7 28
  • 18.
    Auto-Sharding • Shard Key Shard 1 Shard 2 users users name1 name2 name3 name7 name8 name9 name4 name5 name6 items mongos item1 item2 item3 client client mongos mongoc Shard 2011 7 28
  • 19.
  • 20.
    2011 1 Shard 1 mongoc mongos mongod mongod mongod Shard 2 Web Socket mongos mongoc mongod mongod mongod Shard 3 mongos mongoc mongod mongod mongod (memcached) LB ID/Point/ (HAProxy) MySQL EC2 m2.2xlarge (Mem 34.2GB / 13 EC2CU) c1.xlarge (Mem 7GB / 20 EC2CU) m1.large (Mem 7.5GB / 4 EC2CU) c1.medium (Mem 1.7GB / 5 EC2CU) m1.small (Mem 1.7GB / 1 EC2CU) EBS S3 CloudFront Elastic MapReduce 2011 7 28
  • 21.
    2011 3 Shard 1 mongoc mongos mongod mongod mongod Shard 2 Web Socket mongos mongoc mongod mongod mongod Shard 3 mongos mongoc mongod mongod mongod (memcached) Shard 4 mongos mongod mongod mongod LB ID/Point/ (HAProxy) MySQL EC2 m2.2xlarge (Mem 34.2GB / 13 EC2CU) c1.xlarge (Mem 7GB / 20 EC2CU) m1.large (Mem 7.5GB / 4 EC2CU) c1.medium (Mem 1.7GB / 5 EC2CU) m1.small (Mem 1.7GB / 1 EC2CU) EBS S3 CloudFront Elastic MapReduce 2011 7 28
  • 22.
    2011 5 Shard 1 mongoc mongos mongod mongod mongod Shard 2 Web Socket mongos mongoc mongod mongod mongod Shard 3 mongos mongoc mongod mongod mongod (memcached) Shard 4 mongos mongod mongod mongod LB ID/Point/ Shard 5 (HAProxy) MySQL mongod mongod mongod EC2 m2.2xlarge (Mem 34.2GB / 13 EC2CU) Shard 6 c1.xlarge (Mem 7GB / 20 EC2CU) m1.large (Mem 7.5GB / 4 EC2CU) mongod mongod mongod c1.medium (Mem 1.7GB / 5 EC2CU) m1.small (Mem 1.7GB / 1 EC2CU) EBS S3 CloudFront Elastic MapReduce 2011 7 28
  • 23.
    2011 7 Shard 1 mongoc mongod mongod mongod mongos mongos Shard 2 Web Socket mongoc mongod mongod mongod Shard 3 mongos mongoc mongod mongod mongod (memcached) Shard 4 mongod mongod mongod LB ID/Point/ Shard 5 (HAProxy) MySQL mongod mongod mongod EC2 m2.2xlarge (Mem 34.2GB / 13 EC2CU) Shard 6 c1.xlarge (Mem 7GB / 20 EC2CU) m1.large (Mem 7.5GB / 4 EC2CU) mongod mongod mongod c1.medium (Mem 1.7GB / 5 EC2CU) m1.small (Mem 1.7GB / 1 EC2CU) EBS S3 CloudFront Elastic MapReduce 2011 7 28
  • 24.
  • 25.
  • 26.
    2011 7 28
  • 27.
    2011 7 28
  • 28.
    mongod Repair 2011 7 28
  • 29.
    2011 7 28
  • 30.
    2011 7 28
  • 31.
  • 32.
  • 33.
    2011 7 28
  • 34.
    2011 7 28
  • 35.
    2011 7 28
  • 36.
    2011 7 28
  • 37.
  • 38.
    6 2011 7 28
  • 39.
  • 40.
    Shard 2 2011 7 28
  • 41.
  • 42.
  • 43.
    2011 7 28
  • 44.
    2011 7 28
  • 45.
    2011 7 28
  • 46.
    2 Shard 2011 7 28
  • 47.
    2011 7 28
  • 48.
    2011 7 28
  • 49.
  • 50.
  • 51.
    2011 7 28
  • 52.
  • 53.
    MongoDB 1.6.5 → 1.8.2 2011 7 28
  • 54.
    2011 7 28
  • 55.
    2011 7 28
  • 56.
    chunk chunk 2011 7 28
  • 57.
  • 58.
    2011 7 28
  • 59.
    4 Shard 2011 7 28
  • 60.
    2011 7 28
  • 61.
    2011 7 28
  • 62.
    2011 7 28
  • 63.
    2011 7 28
  • 64.
    2011 7 28
  • 65.
    2011 7 28
  • 66.
    2011 7 28
  • 67.
    Shard 2 EC2 2011 7 28
  • 68.
    30 Repair 2011 7 28
  • 69.
    2011 7 28
  • 70.
    mongod 1 2011 7 28
  • 71.
    2011 7 28
  • 72.
    2011 7 28
  • 73.
    2011 7 28
  • 74.
    2011 7 28