CRUD 操作の実行を変更
Overview
このガイドでは、MongoDB Go ドライバーがレプリカセットの書込み保証、読み取り保証、 読み込み設定( read preference ) 構成を使用して、作成、読み取り、更新、削除(CRUD)操作を実行する方法を変更する方法を学習します。
次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。
クライアント レベル。オーバーライドされない限り、すべての操作実行にデフォルトを設定します
セッション レベル
トランザクション レベル
データベース レベル
コレクション レベル
次のセクションでは、レプリカセット内のデータの整合性と可用性をカスタマイズする方法を学習できます。
書込み保証 (write concern)
書込み保証 (write concern) は、挿入やアップデートなどの書込み (write) 操作が成功として返される前に、この操作を確認する必要があるレプリカセット内のデータを保持するノードの数を示します。 デフォルトでは、 書込み保証 (write concern) では、書込み (write) 操作が成功と見なされる前に、 プライマリ レプリカセット のノードのみが書込み (write) 操作を確認する必要があります。
オプション
MongoDB Go ドライバーには、レプリカセットの書込み保証 (write concern) を指定できる writeconcern
パッケージが用意されています。 WriteConcern
タイプのSetWriteConcern()
メソッドを使用して書込み保証(write concern)を設定します。 WriteConcern
タイプには、一般的な書込み保証の指定を選択するための次のメソッドがあります。
方式 | 説明 |
---|---|
Custom() | The client requests acknowledgement that write operations propagate to
tagged members of a mongod instance. For more
information, see the Write Concern specification.Parameter: string |
Journaled() | The client requests acknowledgement that write operations are
written to the on-disk journal. For more information, see the
Write Concern specification. Parameter: none |
Majority() | The client requests acknowledgement that write operations propagate to the
majority of data-bearing voting members. For more information, see the
Write Concern specification. Parameter: none |
Unacknowledged() | The client requests requests no acknowledgment of write
operations. For more information, see the
Write Concern specification for w: 0. Parameter: none |
W1() | The client requests acknowledgement that write operations have
been written to memory on one node, such as the standalone mongod or
the primary in a replica set. For more
information, see the Write Concern specification for w: 1. Parameter: none |
より特殊な書込み保証が必要な場合は、カスタムWriteConcern
構造体リテラルを定義できます。 WriteConcern
構造体で次のフィールドを設定できます。
フィールド | 説明 |
---|---|
W | Specifies the number of mongod instances or tagged members
that write operations must propagate to for acknowledgement. Common values include
1 , 0 , and "majority" .Type: string or int |
Journal | Specifies if write operations must be written to the on-disk
journal for acknowledgement. Type: bool |
WTimeout | Specifies a time limit for the write concern. This setting is
applicable only for W values greater than 1. Specifying this
setting and specifying a Timeout on the client at the same time
results in undefined behavior. To learn more, see the
Write Concern specification for wtimeout.Type: time.Duration |
Tip
あるいは、 接続stringで書込み保証 (write concern)を指定することもできます。 詳細については、書込み保証(write concern)オプションに関するサーバーのマニュアル エントリを参照してください。
例
次のコードは、クライアント レベルとコレクション レベルで異なる書込み保証を指定する方法を示しています。 クライアントレベルの書込み保証 (write concern) は、2 つのレプリカセット ノードからの確認を要求し、ジャーナリングをfalse
に設定します。 コレクションレベルの書込み保証(write concern) は、レプリカセット ノードの過半数からの確認応答を要求します。
uri := "mongodb://<hostname>:<port>" journal := false cliWC := &writeconcern.WriteConcern{ W: 2, Journal: &journal, } clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC) client, err := mongo.Connect(context.TODO(), clOpts) ... collWC := writeconcern.Majority() collOpts := options.Collection().SetWriteConcern(collWC) coll := client.Database("db").Collection("myColl", collOpts)
読み取り保証(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() | The query returns the instance’s most recent data. 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Majority() | このクエリは、レプリカセット内の過半数のノードに書き込まれたことが確認されたインスタンスの最新データを返します。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
Snapshot() | クエリでは、特定の時点における mongod インスタンスのデータの完全なコピーが返されます。 マルチドキュメントトランザクション 内の操作でのみ使用できます。 詳細については、「読み取り保証 (read concern) 」の仕様を参照してください。 |
例
次のコードは、「majority」の読み取り保証(read concern)を指定する方法を示しています。 次に、コードはこのオプションを持つCollection
を選択します。
rc := readconcern.Majority() opts := options.Collection().SetReadConcern(rc) database := client.Database("db") 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
または、 接続stringで読み込み設定(read preference)を指定することもできます。 詳細については、サーバー マニュアルの「 読み込み設定(read preference)オプション 」に関する記述を参照してください。
例
次のコードは、セカンダリ ノードから読み取るための読み込み設定 (read preference) を指定する方法を示しています。 次に、コードはこのオプションを持つDatabase
を選択します。
rp := readpref.Secondary() opts := options.Database().SetReadPreference(rp) database := client.Database("db", opts)
詳細情報
このガイドの概念の詳細については、次のサーバー ドキュメントを参照してください。