mongodbパフォーマンスの向上-インデックスの設定


1.概要


ある日、サービスを実行している間に、一部のビデオに「お気に入り」と表示される機能に問題が発生していることがわかりました.mongodbのcollectionには多くのドキュメントがあるため、検索速度が遅すぎるため、この問題を解決するプロセスを書いてみます.

2. 문제파악


バックエンドで問題が検出されると、開発バージョン(dev)で問題が正常に発生し、実際の生産環境(生産)でのみ発生します.
devとproductionの最大の違いはdb内のドキュメントの数です.devはチームメンバーのみが使用するテストツールであり、生産は多くのユーザーが使用します.
確認すると、ビデオ情報を含むビデオセットで、「お気に入り」をクリックしたビデオに関するドキュメントを検索し、「お気に入り」のフィールド値をtrueに変換するロジックでは、ビデオの取得に非常に時間がかかります.

3.解決方法


mongodbのパフォーマンスを向上させるための複数の方法を見つけ,検索キーをdbのインデックスに設定するための複数の方法を試みた.
robo 3 Tは、次のクエリを入力します.

1)索引の設定


お気に入りapiを呼び出すと、受信したビデオidを使用してビデオコレクションでドキュメントを検索するため、ビデオidに次のインデックスを設定します.
ビデオidを表すフィールド名は「id」なので、createIndex({「id」:1})を使用して、次のようにフィールドにインデックスを設定できます.
db.getCollection('videos').createIndex({"id": 1})
うまく生成されている場合、出力されるdodcumentは次のようになります.

2)索引の検査


インデックスを設定すると、dbのインデックスを次の方法で確認できます.
db.getCollection('videos').getIndexes()
mongodbが自動的にkey値「id」を生成し、生成したばかりの「id」を見ることができます.
新しく作成されたインデックス名は「id 1」で、インデックスを削除します.
デフォルトでは、index nameはフィールド名の末尾に「」の名前を付けて作成されます.

3)無効な場合はインデックスを削除


誤ったインデックスを設定または削除した場合は、次のクエリを使用してインデックスを削除できます.
削除するインデックス名をdropIndexに入力します.
db.getCollection('videos').dropIndex("id_1")

4.結果


postmanを用いて問題のapiの応答速度をテストした結果,応答速度は7.76秒から0.319秒に20倍以上向上したことが分かった.

の最後の部分


dbにindexを設定する簡単な方法を適用することで,性能が大幅に向上したことが分かった.
検索効率を向上させるためには、indexをdbのキーフィールド値に使用することが望ましい.
ただし、dbにインデックスが多すぎるとパフォーマンスが低下する可能性がありますので、注意してください.
(通常は1つのcollectionに対してindexを1つだけ設定することをお勧めします!)
今度はもっと面白い文字で皆さんにお会いします😆

Reference


https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/