Más contenido relacionado
Similar a Mongodb World 2014 (20)
Más de Yoshihiro Iwanaga (9)
Mongodb World 2014
- 10. 小売業界。20ヶ国 以上で展開。
スキーマ
{
id : 709,
en_US : { name: ..., description: ..., ... },
en_GB : { name: ..., description: ..., ... },
fr_FR : { name: ..., description: ..., ... },
...
}
検索される製品は 国ごとに偏り がある
1つの document に全言語のデータを詰め込んでいる
アクセスパターン
製品カタログ
- 11. どこがダメなの?
ポイント: 使わないデータも RAM にロードされる
1回の検索で使うのは全体の 1/20 のみ
メモリの無駄遣い
mongod は document に何が入っているか知らない
{
id : 709,
en_US : { name: ..., description: ..., ... },
en_GB : { name: ..., description: ..., ... },
fr_FR : { name: ..., description: ..., ... },
...
}
→ ドキュメントを取得した後、projection を行う。
- 15. どこがダメなのか?
write パターンのみで shard key を決定
→ ほとんどが “security_id” と “timestamp” がベース
Shard Key の選び方
Read のパターン
Aggregation する度に scatter & gather
「ある期間内」に、「どんなインシデント」が、何回発生したか
- 16. 改善策:Shard Key を変更
{ security_id : 1, ts : 1 }
適切な Shard key を設定
ポイント: write と read 両方のアクセスパターンを考慮
compound shard key を利用
- 18. heavy bulk update
あるときは 10% の更新
あるときは 100% 更新
5 倍 の処理性能が必要に。
→ Shard 追加 で追従しようとした
ランダムな update が多い
あるとき、サービスが急成長
意図:スキーマ変更ではこれ以上の改善が見込めない
Notas del editor
- GitHub の最新バージョンでは、このオプションを指定して有効にできます。
ただし、プロダクション環境ではまだ使わないでね、と言ってました。
- 新しい製品を追加するときは、1回の INSERT クエリで済むようになってますね。
このスキーマでは無駄が発生します。何が悪いんでしょう。
- でも、9台のクラスタを5倍に増やして 45 台にするよりも、
9台のマシンを SSD 搭載のマシンに変更する方が、
トータルのコストが小さくなる。
運用の判断に関する教訓。