MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでパフォーマンスに影響を与えずに大量の挿入・更新を行うには?

MongoDBでは、insertMany()メソッドを使うことで、複数のドキュメントをコレクションに一括挿入できます。さらに、ensureIndex()でインデックスを作成しておくことで、大量データを扱う場合でも検索や更新のパフォーマンスを維持しやすくなります。

insertMany()で複数のドキュメントを挿入する

まずは、複数のドキュメントをまとめて挿入する例を見てみましょう。

> db.demo325.insertMany( [
... { _id: 101, Name: "Chris", Age: 23 },
... { _id: 102, Name: "David", Age: 24 },
... { _id: 103, Name: "Bob", Age: 22 }
... ] );
{ "acknowledged" : true, "insertedIds" : [ 101, 102, 103 ] }

このようにinsertMany()を使えば、1回のリクエストで複数ドキュメントを効率的に登録でき、個別にinsert()を実行するよりもネットワークのオーバーヘッドを抑えられます。

find()メソッドで挿入結果を確認する

挿入したドキュメントは、find()メソッドで確認できます。

> db.demo325.find().pretty();

実行すると、次のような出力が得られます。

{ "_id" : 101, "Name" : "Chris", "Age" : 23 }
{ "_id" : 102, "Name" : "David", "Age" : 24 }
{ "_id" : 103, "Name" : "Bob", "Age" : 22 }

ensureIndex()でインデックスを作成する

頻繁に検索や更新の対象となるフィールドにはインデックスを作成しておくと効果的です。ここでは「Name」フィールドにインデックスを設定します。

> db.demo325.ensureIndex({Name:1});

実行結果は以下の通りです。

{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

インデックスが正しく作成されると、「numIndexesAfter」の値が増加していることが確認できます。これにより、Nameフィールドを条件とした検索や更新が高速化されます。

補足:最新バージョンではcreateIndex()を推奨

なお、ensureIndex()は現在非推奨(deprecated)となっており、MongoDBの最近のバージョンではcreateIndex()を使用することが推奨されています。書き方はほぼ同じで、次のように実行します。

> db.demo325.createIndex({Name:1});

このように、insertMany()による一括挿入と適切なインデックス設計を組み合わせることで、MongoDBでもパフォーマンスへの影響を最小限に抑えながら、大量の挿入・更新処理を実現できます。

  1. MongoDBで正規表現使用時のパフォーマンス問題を回避する方法

    MongoDBで正規表現(regex)を使った検索を実行する際、適切な対策を講じないとパフォーマンスが大幅に低下する恐れがあります。これを回避するためには、インデックスの概念を活用することが有効です。本記事では、実際にコレクションとドキュメントを作成しながら、その手順を具体的に解説します。 インデックスの作成とドキュメントの挿入 まず、createIndex()メソッドを使って「CountryName」と「Name」の2つのフィールドにテキストインデックスを作成します。続いて、insertOne()メソッドでサンプルデータを挿入していきます。意図的に大文字・小文字の異なる「Chris」「ch

  2. MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)

    MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って