mongodb couchdb合同勉強会-2010-12-14
DESCRIPTION
Ameba Pico で導入した MongoDB の話 導入した経緯と、導入後に発生した問題、今後の計画などTRANSCRIPT
![Page 1: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/1.jpg)
Ameba Picoと
MongoDBSuguru NamuraCyberAgent, Inc.
![Page 2: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/2.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
About me
名村 卓 (30)
@snamura
株式会社サイバーエージェント
アメーバピグ、 Ameba Picoプーペガール、メロメロパークなど
![Page 3: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/3.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Ameba Pico
累計登録ユーザー数 3,000,000
DAU 70,000 / MAU 560,000
Amazon EC2 上で稼働
30台くらい
MongoDBは9台
![Page 4: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/4.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
なぜ MongoDB にしたか
![Page 5: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/5.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB導入前の構成
Distributed Database
HAProxy
Socket Servers Application Servers
Amazon S3
![Page 6: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/6.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
データベースの条件
バイナリ形式に対応している
キーに対する Range Scan が可能
Horizontal Partitioning による分散
開発チームがアクティブ
![Page 7: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/7.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDBBSON
インデクスのサポート
Sharding による分散
Chunk の分割の方式が既存のものと同じだった
開発チームが積極的でアクティブ
![Page 8: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/8.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
MongoDB導入まで
![Page 9: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/9.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
最初の計画
Arbitery
Shard 1
Primary
Secondaryconfig
mongos
Shard 1
Primary
Secondaryconfig
mongos
Shard 1
Primary
Secondaryconfig
mongos
Socket Server
![Page 10: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/10.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
導入した構成
Shard 1
Primary
Secondary
Secondaryconfig
Shard 2
Primary
Secondary
Secondaryconfig
Shard 3
Primary
Secondary
Secondaryconfig
Socket Servermongos
![Page 11: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/11.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Amazon EC2
mongoDB は 64bit 推奨なので、最低でも Large インスタンスを使う
Replica Set のセカンダリの1台に EBS を使いデータを保護
EBS はスナップショットも取れる
![Page 12: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/12.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Amazon EC2
Shard
Primary
Secondary
Secondaryconfig
High-CPU Extra Large
High-CPU Extra Large
Large
8 Core7.0 GB
I/O: High
2 Core7.5 GB
I/O: HighEBS
![Page 13: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/13.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
データ移行既存のデータ Key Value のデータ形式
バイナリのソート方式が違う(signed byte?)ので、Key は HEX形式の文字列に変換
{ _id: ObjectId, key: String, value: byte[] }
ObjectId は結果として必要なし
Insert 1件ずつだと時間がかかるので、bulk insert を使って 1,000 件ずつレコードを投入して移行
10,000 insert / sec くらいは普通に出る
![Page 14: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/14.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
プログラムの対応
データアクセスのレイヤーを分離していたので、小さな修正で完了
load, save, fetch, count
![Page 15: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/15.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
遭遇した問題
![Page 16: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/16.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
ファイルシステム
ext3 は extent に時間がかかる
推奨されているのは ext4, xfs
Ameba Pico は ext4
![Page 17: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/17.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Sharding の偏り
Sharding は普通に運用すると偏る
web から各コレクションのアクセス量を確認できる
アクセス量の多いコレクションを moveChunk コマンドで移動する
![Page 18: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/18.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Sharding の偏り
ドキュメント量の少ないコレクションは、Read, Write が偏る
適宜アプリケーションで対処する必要がある
![Page 19: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/19.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
接続プール
Java のドライバーが接続プールを使う
同時処理がプール数 x Multiplier が超えると Out of semaphores が起きる
ファイルオープン数を増やして、スレッド数やプール数を調整する
![Page 20: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/20.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
EBS を使っている Secondary の Priority を 0 にして、 Primary に昇格しないようにしていた
![Page 21: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/21.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Shard 1
Primary
Secondary
Secondaryconfig priority 0
![Page 22: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/22.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
oplog ちょっと古い
oplog 最新
Shard 1
Primary
Secondary
Secondaryconfig priority 0
![Page 23: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/23.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Shard 1
Primary
Secondary
Secondaryconfig priority 0
oplog ちょっと古い
oplog 最新
Primary よろしく
無理です
![Page 24: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/24.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Primary 選出問題
Primary が起動していない Replica Set は、通常の方法では設定を変えられない
stepDown などが実行できない
config サーバー全台の内容を直接変更
復旧はした
![Page 25: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/25.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
よかったところ思ったよりずっと安定している
プロトコルがシンプルでノンブロッキングIOなドライバへの対応が容易
Atomic modifiers 便利
Sharding + Replica Set
mmap を活用するので、基本メモリキャッシュに乗る
![Page 26: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/26.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
気になるところ
Durability
Chunk が分割されるときのフリーズ
Sharding の安定性
Primary がダウンしたときのデータロス
ディスク容量を結構使う
![Page 27: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/27.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
Ameba PicoStatistics
![Page 28: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/28.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
![Page 29: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/29.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
![Page 30: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/30.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
今後の取り組み
![Page 31: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/31.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
アメーバピグのリアルタイム販売アイテムレポートに使用中
map reduce を活用していく
開発中のいくつかのサービスに採用
![Page 32: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/32.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
WebSocket + node.js + mongoDB
webworker 対応に期待
Java Asynchronous Driverhttps://github.com/suguru/mongo-java-async-driver
Python, Ruby
![Page 33: MongoDB CouchDB合同勉強会-2010-12-14](https://reader034.vdocuments.pub/reader034/viewer/2022051412/54b7aefb4a7959305b8b45be/html5/thumbnails/33.jpg)
MongoDB + CouchDB Study Session - Ameba Pico と MongoDB
終わり