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.

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

10,209 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. MongoDBではじめるカジュアルなタイムラインシステム GMO Media, Inc. Technology Promotion Office System Architect Hitoshi Asai
  2. 2. WORK Scala backend system data reporting hadoopFAVORITE NOSQL TWITTER Hitoshi ASAI @hito_asa プログラマですよ。 machida, tokyo, jp #mongodbcasual
  3. 3. TODAYS AGENDAMongoDBを利用したタイムラインシステムのおはなしです。 UPDATES REST API WEB SERVICE TIMELINE TIMELINE SYSTEM #mongodbcasual
  4. 4. TODAYS AGENDAブログサービスのフレンド更新タイムライン画像投稿サービスのお気に入りユーザー投稿タイムラインなどに使われています。 #mongodbcasual
  5. 5. DEMO #mongodbcasual
  6. 6. #mongodbcasual
  7. 7. 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
  8. 8. システム概要 #mongodbcasual
  9. 9. SYSTEM OUTLINE Kestrel Scala MQ WORKER HTTP Casbah Scala Jetty Java PHPWEB SERVICE API MongoDB #mongodbcasual
  10. 10. SYSTEM OUTLINE scale of service 24 MILLION API CALL / DAY 2.4 MILLION USERS 34 MILLION STATUS UPDATES #mongodbcasual
  11. 11. SYSTEM OUTLINE scale of data TOTAL 55GB 8 DATABASES 2.2 MILLION COLLECTIONS 100 MILLION DOCUMENTS #mongodbcasual
  12. 12. 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
  13. 13. SYSTEM OUTLINE scale of servers 2.2 MILLION COLLECTIONS!? #mongodbcasual
  14. 14. (残念な)スキーマ設計 #mongodbcasual
  15. 15. SCHEMA DESIGNtimeline design FOLLOWERS DELIVER TIMELINE NEW FOLLOWERS WORKER STATUS TIMELINE RECEIVE FOLLOWERS TIMELINE #mongodbcasual
  16. 16. SCHEMA DESIGNtimeline design FOLLOWERS TIMELINE 1.有限長 2.最新のみ保持 FOLLOWERS TIMELINE 3.追記のみ 4.常に時系列での取得 FOLLOWERS TIMELINE 5.追記、取得が速いこと #mongodbcasual
  17. 17. SCHEMA DESIGNtimeline 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
  18. 18. SCHEMA DESIGNtimeline 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
  19. 19. SCHEMA DESIGNtimeline design 2.2 MILLION COLLECTIONS!! #mongodbcasual
  20. 20. 200万コレクションの世界 #mongodbcasual
  21. 21. THE WORLD OF CRAZY SCHEMA 普通には作れないので設定を変更 # Specify .ns file size for new databases. - nssize = 16 + nssize = 800 コレクション数上限:2.4万 => 120万(足りない) #mongodbcasual
  22. 22. 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
  23. 23. THE WORLD OF CRAZY SCHEMA そこで・・・ NSSIZEはデータベースごとなので 上限に達したら新たなデータベースを作る コレクション数上限:60万 => infinity(足りる!) #mongodbcasual
  24. 24. THE WORLD OF CRAZY SCHEMA すぐSWAPしちゃう RESTART RESTART RESTART RESTART RESTART RESTART RESTART RESTART #mongodbcasual
  25. 25. THE WORLD OF CRAZY SCHEMA mongoコンソールがすぐ落ちる SECONDARY> use timeline-01 SECONDARY> db. TAB exception: SECONDARY> db.exception: invoke failed: exception $ #mongodbcasual
  26. 26. THE WORLD OF CRAZY SCHEMA コレクションの削除で止まる GLOBAL LOCK! #mongodbcasual
  27. 27. 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
  28. 28. THE WORLD OF CRAZY SCHEMA 応答時間が安定しない SPIKY! #mongodbcasual
  29. 29. 教訓 #mongodbcasual
  30. 30. LESSONS コレクションはたくさん作らない DO NOT CREATE SO MANY COLLECTIONS #mongodbcasual
  31. 31. LESSONS 1インスタンスでDBをたくさん持たない DO NOT HOST SO MANY DATABASES ON ONE INSTANCE #mongodbcasual
  32. 32. LESSONS シビアな応答性能を求めない DO NOT USE MONGODB FOR HARD RESPONSE TIME REQUIREMENT #mongodbcasual
  33. 33. LESSONS MongoDBをカジュアルに導入しない MONGODB IS NOT CASUAL!! BY OUR DBA #mongodbcasual
  34. 34. 以上です、ありがとうございました。 #mongodbcasual

×