SlideShare a Scribd company logo
1 of 34
Download to read offline
MongoDBではじめる
カジュアルなタイムラインシステム

           GMO Media, Inc.
           Technology Promotion Office
           System Architect
                       Hitoshi Asai
WORK
                            Scala
                   backend system
                    data reporting
                           hadoop

FAVORITE NOSQL   TWITTER
                            Hitoshi ASAI
                            @hito_asa
                            プログラマですよ。
                            machida, tokyo, jp

                   #mongodbcasual
TODAYS AGENDA
MongoDBを利用したタイムラインシステムのおは
なしです。

                UPDATES




                                     REST
                                      API
      WEB SERVICE         TIMELINE    TIMELINE SYSTEM

                                #mongodbcasual
TODAYS AGENDA
ブログサービスのフレンド更新
タイムライン

画像投稿サービスのお気に入り
ユーザー投稿タイムライン

などに使われています。

                #mongodbcasual
DEMO


   #mongodbcasual
#mongodbcasual
TODAYS AGENDA
というタイムライン機能を作るときの
 SELECT * FROM contents WHERE user_id IN (
   SELECT follow_id FROM follows WHERE user_id = xxx
 )
 ORDER BY create_date DESC LIMIT 20
                                  CRAZY SLOW!!

を、解決するためのREST APIのおはなしです。

                               #mongodbcasual
システム概要




    #mongodbcasual
SYSTEM OUTLINE




                         Kestrel




                                              Scala
                                   MQ                  WORKER
                HTTP




                                              Casbah
                       Scala
                       Jetty
         Java
         PHP




WEB SERVICE                        API                 MongoDB
                                         #mongodbcasual
SYSTEM OUTLINE
 scale of service

  24 MILLION API CALL / DAY
  2.4 MILLION USERS
  34 MILLION STATUS UPDATES




                       #mongodbcasual
SYSTEM OUTLINE
 scale of data

  TOTAL 55GB
  8 DATABASES
  2.2 MILLION COLLECTIONS
  100 MILLION DOCUMENTS



                       #mongodbcasual
SYSTEM OUTLINE
 scale of servers

  2   API SRVS               API / WORKER / MQ

  2   Worker SRVS
  2   MQ SRVS        3 NODE REPLICA SET
  3   MongoDB SRVS   NO SHARDING
                     8 DATABASES
                     2.2 MILLION COLLECTIONS
                                 MongoDB

                        #mongodbcasual
SYSTEM OUTLINE
 scale of servers



            2.2 MILLION COLLECTIONS!?



                            #mongodbcasual
(残念な)スキーマ設計




        #mongodbcasual
SCHEMA DESIGN
timeline design
                                      FOLLOWERS
                         DELIVER
                                       TIMELINE

     NEW                              FOLLOWERS
                       WORKER
    STATUS                             TIMELINE


             RECEIVE                  FOLLOWERS
                                       TIMELINE


                                   #mongodbcasual
SCHEMA DESIGN
timeline design
  FOLLOWERS
   TIMELINE   1.有限長
              2.最新のみ保持
  FOLLOWERS
   TIMELINE   3.追記のみ
              4.常に時系列での取得
  FOLLOWERS
   TIMELINE
              5.追記、取得が速いこと

                     #mongodbcasual
SCHEMA DESIGN
timeline design
                                    CAPPED
                                  COLLECTION
  FOLLOWERS
   TIMELINE       1.   capped size
                  2.   auto-FIFO age-out
  FOLLOWERS
   TIMELINE       3.   insert only
                  4.   no indexes
  FOLLOWERS
   TIMELINE
                  5.   high performance(?)

                                  #mongodbcasual
SCHEMA DESIGN
timeline design
                CAPPED                   CAPPED
              COLLECTION               COLLECTION
  FOLLOWERS                FOLLOWERS
   TIMELINE                 TIMELINE
                CAPPED                   CAPPED
              COLLECTION               COLLECTION
  FOLLOWERS                FOLLOWERS
   TIMELINE                 TIMELINE
                CAPPED                   CAPPED
              COLLECTION               COLLECTION
  FOLLOWERS                FOLLOWERS
   TIMELINE                 TIMELINE
                                       ... for each users
                               #mongodbcasual
SCHEMA DESIGN
timeline design



          2.2 MILLION COLLECTIONS!!



                          #mongodbcasual
200万コレクションの世界




        #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 普通には作れないので設定を変更
    # Specify .ns file size for new databases.
  - nssize = 16
  + nssize = 800

 コレクション数上限:2.4万 => 120万(足りない)


                               #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 [SERVER-84] when replicating capped collection, _id
 index is created at the target
 capped collectionでPrimaryにないインデックスが
 Secondaryに作られるバグ

 コレクション数上限:120万 => 60万 (超足りない)

                                         (fixed by 2.0.3)
                               #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 そこで・・・
 NSSIZEはデータベースごとなので
 上限に達したら新たなデータベースを作る



 コレクション数上限:60万 => infinity(足りる!)


                      #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 すぐSWAPしちゃう


                RESTART             RESTART       RESTART

      RESTART             RESTART       RESTART       RESTART
                                                                RESTART




                                              #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 mongoコンソールがすぐ落ちる

  SECONDARY> use timeline-01
  SECONDARY> db.
                                TAB


                exception:
  SECONDARY> db.exception: invoke failed:
                exception
  $

                                #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 コレクションの削除で止まる


           GLOBAL LOCK!




                          #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 削除すると断片化して止まる
  [rsSync] warning: slow scan in allocFromFreeList (in
  write lock)                      FRAGMENTATION

  [rsSync] warning: newExtent 127729 scanned
  build index timeline-db02.home_tl535861 { _id: 1 }
  [rsSync] build index done 68 records 8.9 secs
                                 GLOBAL LOCK!

 global lock マジ xxxxxx
                               #mongodbcasual
THE WORLD OF CRAZY SCHEMA
 応答時間が安定しない


                            SPIKY!




                      #mongodbcasual
教訓




     #mongodbcasual
LESSONS



     コレクションはたくさん作らない
          DO NOT CREATE SO MANY COLLECTIONS




                               #mongodbcasual
LESSONS



  1インスタンスでDBをたくさん持たない
    DO NOT HOST SO MANY DATABASES ON ONE INSTANCE




                               #mongodbcasual
LESSONS



          シビアな応答性能を求めない
 DO NOT USE MONGODB FOR HARD RESPONSE TIME REQUIREMENT




                                #mongodbcasual
LESSONS



    MongoDBをカジュアルに導入しない
          MONGODB IS NOT CASUAL!!   BY OUR DBA




                          #mongodbcasual
以上です、ありがとうございました。




          #mongodbcasual

More Related Content

What's hot

CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
Akihiro Kuwano
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
Akihiro Kuwano
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
moai kids
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
Hiroaki Kubota
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
 
Mongo db勉強会の補足
Mongo db勉強会の補足Mongo db勉強会の補足
Mongo db勉強会の補足
CROOZ, inc.
 

What's hot (20)

CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDBCyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
 
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal LandソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
 
Db tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clustersDb tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clusters
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
MongoDB
MongoDBMongoDB
MongoDB
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
 
Mongo db勉強会の補足
Mongo db勉強会の補足Mongo db勉強会の補足
Mongo db勉強会の補足
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
WiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しいWiredTigerストレージエンジン楽しい
WiredTigerストレージエンジン楽しい
 
InnoDB Table Compression
InnoDB Table CompressionInnoDB Table Compression
InnoDB Table Compression
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 

Similar to MongoDBではじめるカジュアルなタイムラインシステム

大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
Akihiro Kuwano
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Kenta Suzuki
 

Similar to MongoDBではじめるカジュアルなタイムラインシステム (20)

MongoDB勉強会資料
MongoDB勉強会資料MongoDB勉強会資料
MongoDB勉強会資料
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
ソーシャルゲームにおけるAWS/MongoDB利用事例
ソーシャルゲームにおけるAWS/MongoDB利用事例ソーシャルゲームにおけるAWS/MongoDB利用事例
ソーシャルゲームにおけるAWS/MongoDB利用事例
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
Docker勉強会
Docker勉強会Docker勉強会
Docker勉強会
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~既存システムへの新技術活用法 ~fluntd/MongoDB~
既存システムへの新技術活用法 ~fluntd/MongoDB~
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪
 
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
[db tech showcase Tokyo 2015] C15:DevOps MySQL in カカクコム~ OSSによる可用性担保とリアルタイムパフ...
 
Cassandra Summit 2016 注目セッション報告
Cassandra Summit 2016 注目セッション報告Cassandra Summit 2016 注目セッション報告
Cassandra Summit 2016 注目セッション報告
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
LAMMPS クラウド活用勉強会説明資料(Rescale編) 2017/01/24
LAMMPS クラウド活用勉強会説明資料(Rescale編) 2017/01/24LAMMPS クラウド活用勉強会説明資料(Rescale編) 2017/01/24
LAMMPS クラウド活用勉強会説明資料(Rescale編) 2017/01/24
 

MongoDBではじめるカジュアルなタイムラインシステム