CRUD 操作の実行を変更
Overview
このガイドでは、MongoDB Go ドライバーがレプリカセットの書込み保証、読み取り保証、 読み込み設定( read preference ) 構成を使用して、作成、読み取り、更新、削除(CRUD)操作を実行する方法を変更する方法を学習します。
次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。
クライアント レベル。オーバーライドされない限り、すべての操作実行にデフォルトを設定します
セッション レベル
トランザクション レベル
データベース レベル
コレクション レベル
クエリ レベル
レプリカセット内のデータの整合性と可用性をカスタマイズする必要がある場合は、このガイドをお読みください。
書込み保証 (write concern)
書込み保証 (write concern) は、挿入やアップデートなどの書込み (write) 操作が成功として返される前に、この操作を確認する必要があるレプリカセット内のデータを保持するノードの数を示します。 デフォルトでは、 書込み保証 (write concern) では、書込み (write) 操作が成功と見なされる前に、 プライマリ レプリカセット のノードのみが書込み (write) 操作を確認する必要があります。
オプション
MongoDB Go ドライバーには、レプリカセットの書込み保証 (write concern) を指定できる writeconcern
パッケージが用意されています。 Option
タイプのSetWriteConcern()
メソッドを使用して書込み保証(write concern)を設定します。 Option
型では、書込み保証を指定するための次のメソッドがあります。
方式 | 説明 |
---|---|
J() | The client requests acknowledgement that write operations are written to the
journal. For more information, see the
Write Concern specification. Parameter: bool |
W() | The client requests acknowledgement that write operations propagate to the
specified number of mongod instances. For more information, see the
Write Concern specification.Parameter: int |
WMajority() | The client requests acknowledgement that write operations propagate to the
majority of mongod instances. For more information, see the
Write Concern specification.Parameter: none |
WTagSet() | The client requests acknowledgement that write operations propagate to the
specified mongod instance. For more
information, see the Write Concern specification.Parameter: string |
Tip
または、接続文字列で書込み保証 (write concern) を指定することもできます。詳細については、サーバー マニュアルの「書込み保証(write concern) オプション」に関する記述を参照してください。
例
次のコードは、書込み保証 (write concern) を指定して、2 つのレプリカセット ノードに確認応答を要求する方法を示しています。 次に、コードはこのオプションを持つClient
を作成します。
uri := "mongodb://<hostname>:<port>" wc := writeconcern.W(2) opts := options.Client().ApplyURI(uri).SetWriteConcern(writeconcern.New(wc)) client, err := mongo.Connect(context.TODO(), opts)
読み取り保証(read concern)
読み取り保証(read concern)オプションを使用すると、クライアントがクエリから返すデータを決定できます。 デフォルトの読み取り保証 (read concern) レベルは "local" です。つまり、クライアントはインスタンスの最新データを返しますが、そのデータがレプリカセットのノードの過半数に書き込まれたことは保証されません。
オプション
MongoDB Go ドライバーにはreadconcern
パッケージが用意されており、レプリカセットの読み取り保証(read concern)を指定できます。 ReadConcern
タイプのSetReadConcern()
メソッドを使用して読み取り保証を設定します。 ReadConcern
タイプでは、読み取り保証を指定するための次のメソッドがあります。
方式 | 説明 |
---|---|
Available() | クエリはインスタンスからデータを返しますが、そのデータがレプリカセットのノードの大半に書き込まれたことを保証するものではありません。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Linearizable() | クエリは、 majority の 書込み保証(write concern) を使用して発行され、読み取り操作の開始前に確認されたすべての成功した書込みを反映したデータを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Local() | クエリは、インスタンスの最新データを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Majority() | このクエリは、レプリカセット内の過半数のノードに書き込まれたことが確認されたインスタンスの最新データを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Snapshot() | クエリでは、特定の時点における mongod インスタンスのデータの完全なコピーが返されます。 マルチドキュメントトランザクション 内の操作でのみ使用できます。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
例
次のコードは、「majority」の読み取り保証(read concern)を指定する方法を示しています。 次に、コードはこのオプションを持つCollection
を選択します。
rc := readconcern.Majority() opts := options.Collection().SetReadConcern(rc) database := client.Database("myDB") coll := database.Collection("myCollection", opts)
読み込み設定 (read preference)
読み込み設定(read preference)オプションは、MongoDB クライアントが読み取り操作を レプリカセット のノードにルーティングする方法を指定します。 デフォルトでは、アプリケーションの読み取り操作は、 レプリカセット 内の プライマリ を対象に行われます。
読み込み設定 (read preference) は、読み込み設定 (read preference) モードと、オプションのタグセット リスト、 maxStalenessSecondsオプション、およびヘッジされた読み取りオプションで構成されています。
オプション
MongoDB Go ドライバーには、レプリカセットの読み込み設定(read preference)を指定できるreadpref
パッケージが用意されています。 読み込み設定(read preference)を設定するには、 SetReadPreference()
メソッドをReadPref
タイプで使用します。 ReadPref
型には、読み込み設定(read preference)を指定するための次のメソッドがあります。
方式 | 説明 |
---|---|
Nearest() | クライアントは、指定されたレイテンシのしきい値に基づいて、プライマリまたはセカンダリである、ランダムに選択された適格なレプリカセットのメンバーから読み取ります。 詳細については、読み込み設定(read preference) サーバー マニュアルのエントリを参照してください。 |
Primary() | クライアントは、現在のレプリカセット プライマリ ノードから読み取ります。 詳細については、読み込み設定(read preference) サーバー マニュアルのエントリを参照してください。 |
PrimaryPreferred() | クライアントは、ほとんどの場合、プライマリ ノードからデータを読み取ります。 プライマリが使用できない場合、操作はセカンダリ ノードから読み取られます。 詳細については、読み込み設定(read preference) サーバー マニュアルのエントリを参照してください。 |
Secondary() | クライアントはレプリカセットの セカンダリ メンバーから読み取ります。 詳細については、読み込み設定(read preference) サーバー マニュアルのエントリを参照してください。 |
SecondaryPreferred() | クライアントはほとんどの場合、セカンダリ ノードからデータを読み取ります。 セカンダリが使用できない場合、操作はプライマリ ノードから読み取られます。 詳細については、読み込み設定(read preference) サーバー マニュアルのエントリを参照してください。 |
Tip
または、接続文字列で読み込み設定(read preference)を指定することもできます。詳細については、サーバーマニュアルの「読み込み設定(read preference)オプション」に関する記述を参照してください。
例
次のコードは、セカンダリ ノードから読み取るための読み込み設定 (read preference) を指定する方法を示しています。 次に、コードはこのオプションを持つDatabase
を選択します。
rp := readpref.Secondary() opts := options.Database().SetReadPreference(rp) database := client.Database("myDB", opts)
詳細情報
このガイドの概念の詳細については、次のサーバー ドキュメントを参照してください。