Docs Menu
Docs Home
/ / /
Go Driver
/ /

CRUD 操作の実行を変更

項目一覧

  • Overview
  • 書込み保証 (write concern)
  • 読み取り保証(read concern)
  • 読み込み設定 (read preference)
  • 詳細情報

このガイドでは、MongoDB Go ドライバーがレプリカセットの書込み保証読み取り保証、 読み込み設定( read preference ) 構成を使用して、作成、読み取り、更新、削除(CRUD)操作を実行する方法を変更する方法を学習します。

次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。

  • クライアント レベル。オーバーライドされない限り、すべての操作実行にデフォルトを設定します

  • セッション レベル

  • トランザクション レベル

  • データベース レベル

  • コレクション レベル

次のセクションでは、レプリカセット内のデータの整合性と可用性をカスタマイズする方法を学習できます。

書込み保証 (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) レベルは "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)オプションは、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)

このガイドの概念の詳細については、次のサーバー ドキュメントを参照してください。

戻る

複合演算子