レプリカセットでの CRUD 操作の実行方法の指定
項目一覧
Overview
このガイドでは、書込み保証 (write concern)、読み取り保証 (read concern)、 読み込み設定( 読み込み設定 (read preference) ) オプションを構成して、 MongoDB PHPライブラリがレプリカセットに対して作成、読み取り、アップデート、削除( CRUD )操作を実行する方法を変更する方法を説明します。
次のレベルで、書込み保証、読み取り保証、読み込み設定(read preference)のオプションを設定できます。
クライアント(オーバーライドされない限り、すべての操作実行にデフォルトを設定します)
セッション
トランザクション
Database
コレクション
このリストは、オプション設定の優先順位の増加順も示しています。 例、トランザクションに読み取り保証 (read concern)レベルを設定すると、クライアントから継承された読み取り保証 (read concern)レベルが上書きされます。
これらのオプションを使用すると、レプリカセット内のデータの因果整合性と可用性をカスタマイズできます。 読み込み設定( 読み込み設定 (read preference)) 、 読み取り保証( 読み取り保証 (read concern)) 、 書込み保証( 書込み保証 (write concern) ) オプションの完全なリストを表示するには、 MongoDB Serverマニュアルの次のガイドを参照してください。
読み取り操作と書込み操作の設定
ライブラリが読み取り操作をルーティングする方法は、 読み込み設定( 読み込み設定 (read preference)) を設定することで制御できます。 また、読み取りおよび書込み保証を設定して、ライブラリがレプリカセットに対する読み取りおよび書込み操作の確認を待機する方法も制御できます。
このセクションでは、オプション配列パラメーターを次のいずれかのメソッドに渡すことで、 読み込み設定( 読み込み設定 (read preference)) 、 読み取り保証( 読み取り保証 (read concern)) 、 書込み保証( 書込み保証 (write concern) ) をさまざまなレベルで構成する方法を示します。
MongoDB $ Client $Client::__construct() : クライアントレベルの設定を構成します
MongoDB $ Client $Client::startSession() : セッションレベルの設定を構成します
MongoDB$Driver\Session::startTransaction() : トランザクションレベルの設定を構成します
MongoDB$Client\Client::selectDatabase() : データベースレベルの設定を構成します
MongoDB$Client\Client::selectCollection() : コレクション レベルの設定を構成します
クライアント構成
この例では、 コンストラクターに配列を渡すことで、 MongoDB\Client
インスタンスの読み込み設定( 読み込み設定 (read preference))、読み取り保証( 読み取り保証 (read concern))、書込み保証 (write concern)(write concern)を設定する方法を示しています。 このコードは、次の設定を構成します。
secondary
読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は セカンダリレプリカセットメンバーからデータを取得しますlocal
読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証します2
書込み保証 ( 書込み保証 (write concern)) : プライマリと 1 つのセカンダリレプリカセットノードは、書込み (write)操作を確認する必要があります
$clientOptions = [ 'readPreference' => 'secondary', 'readConcernLevel' => 'local', 'w' => '2', ]; $client = new Client('mongodb://localhost:27017', $clientOptions);
あるいは、接続 URI で読み取り設定と書込み設定を指定することもできます。これはMongoDB\Client
コンストラクターにパラメーターとして渡されます。
$uri = 'mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2'; $client = new Client($uri);
注意
readPreference
、 readConcernLevel
、およびw
クライアントオプションは string 値を受け入れます。 読み取りと書込みの設定を他のレベルで構成する場合は、対応するオプションにMongoDB\Driver\ReadPreference
、 MongoDB\Driver\ReadConcern
、 MongoDB\Driver\WriteConcern
タイプの値を割り当てる必要があります。
セッション構成
この例では、 startSession()
メソッドに配列を渡すことで、セッションの 読み込み設定( 読み込み設定 (read preference)) 、 読み取り保証( 読み取り保証 (read concern)) 、書込み保証 (write concern)(write concern) を設定する方法を示しています。 このコードは、次の設定を構成します。
PRIMARY_PREFERRED
読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は、プライマリレプリカセットメンバーからデータを取得します。プライマリが使用できない場合は セカンダリ メンバーからデータが取得されますLOCAL
読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証しますMAJORITY
書込み保証( 書込み保証 (write concern) ) : すべてのレプリカセットの過半数が書込み(write)操作を確認する必要があります
$sessionOptions = [ 'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED), 'readConcern' => new ReadConcern(ReadConcern::LOCAL), 'writeConcern' => new WriteConcern(WriteConcern::MAJORITY), ]; $session = $client->startSession($sessionOptions);
トランザクション構成
この例では、 startTransaction()
メソッドに配列を渡すことで、トランザクションの 読み込み設定( 読み込み設定 (read preference)) 、 読み取り保証( 読み取り保証 (read concern)) 、書込み保証 (write concern)(write concern) を設定する方法を示しています。 このコードは、次の設定を構成します。
PRIMARY
読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は、 プライマリレプリカセットメンバーからデータを取得しますMAJORITY
読み取り保証 (read concern): 読み取り操作は、レプリカセットの過半数に書き込まれたインスタンスの最新データを返します1
書込み保証 ( 書込み保証 (write concern)) : プライマリレプリカセットノードは書込み (write)操作を確認する必要があります
$transactionOptions = [ 'readPreference' => new ReadPreference(ReadPreference::PRIMARY), 'readConcern' => new ReadConcern(ReadConcern::MAJORITY), 'writeConcern' => new WriteConcern(1), ]; $session->startTransaction($transactionOptions);
データベース構成
この例では、オプション配列をselectDatabase()
メソッドに渡すことで、 test_database
というデータベースの読み込み設定( 読み込み設定 (read preference))、読み取り保証( 読み取り保証 (read concern))、書込み保証 (write concern)(write concern)を設定する方法を示します。 このコードは、次の設定を構成します。
PRIMARY_PREFERRED
読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は、プライマリレプリカセットメンバーからデータを取得します。プライマリが使用できない場合は セカンダリ メンバーからデータが取得されますAVAILABLE
読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証しますMAJORITY
書込み保証( 書込み保証 (write concern) ) : すべてのレプリカセットの過半数が書込み(write)操作を確認する必要があります
$db = $client->selectDatabase('test_database', [ 'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED), 'readConcern' => new ReadConcern(ReadConcern::AVAILABLE), 'writeConcern' => new WriteConcern(WriteConcern::MAJORITY), ]);
コレクション構成
この例では、オプション配列をselectCollection()
メソッドに渡すことで、 test_collection
というコレクションの読み込み設定( 読み込み設定 (read preference))、読み取り保証( 読み取り保証 (read concern))、書込み保証 (write concern)(write concern)を設定する方法を示します。 このコードは、次の設定を構成します。
SECONDARY_PREFERRED
読み込み設定 ( 読み込み設定 (read preference)) : 読み取り操作は、セカンダリレプリカセットメンバーからデータを取得します。セカンダリが使用できない場合は、プライマリ ノードからデータが取得されます。AVAILABLE
読み取り保証 (read concern)保証 : 読み取り操作は、インスタンスの最新データを返しますが、レプリカセットのノードの過半数にデータが書き込まれたことを保証します0
書込み保証 ( 書込み保証 (write concern)) : 書込み (write)操作の確認応答を要求しません
$collection = $client->selectCollection('test_database', 'test_collection', [ 'readPreference' => new ReadPreference(ReadPreference::SECONDARY_PREFERRED), 'readConcern' => new ReadConcern(ReadConcern::AVAILABLE), 'writeConcern' => new WriteConcern(0), ]);
高度な読み取り構成
このセクションでは、次の方法で読み取り操作設定をさらにカスタマイズする方法を説明します。
タグセット
MongoDB Serverでは、選択した任意の基準に従ってレプリカセット メンバーにキーと値のタグを適用できます。 次に、それらのタグを使用して、1 つ以上のノードを 読み取り操作の対象にすることができます。
デフォルトでは 、 MongoDB PHPライブラリは、読み取り元ノードを選択するときに タグを無視します。 MongoDB PHPライブラリに特定のタグを優先するように指定するには、それらをMongoDB\Driver\ReadPreference
クラスコンストラクターにパラメーターとして渡します。 次に、 MongoDB\Driver\ReadPreference
オブジェクトをreadPreference
データベースオプションの値として設定します。
米国の複数のデータセンターでホストされているノードを含むレプリカセットに接続しているとします。 このコード例では、 readPreference
オプションをタグセットに設定し、セカンダリレプリカセットメンバーからの読み取りを次の順序で優先するようtest_database
に指示します。
ニューヨークデータセンターのメンバー(
['dc' => 'ny']
)サンフランシスコデータセンターのメンバー(
['dc' => 'sf']
)任意のセカンダリ ノード(
[]
)
$readPreference = new ReadPreference( ReadPreference::RP_SECONDARY, [ ['dc' => 'ny'], ['dc' => 'sf'], [], ], ); $db = $client->selectDatabase( 'test_database', ['readPreference' => $readPreference], );
LocalThreshold
指定した読み込み設定( 読み込み設定 (read preference) )とタグセットと一致するレプリカセット ノードが複数ある場合、 MongoDB PHPライブラリは、 ping時間に応じて選択された、最も近いレプリカセット ノードから読み取ります。
デフォルトでは 、ライブラリはping時間がクエリの最も近いメンバーの15ミリ秒以内であるメンバーのみを使用します。 より高いレイテンシを持つメンバー間で読み取りを分散するには、 localThresholdMS
オプションを設定するMongoDB\Client
コンストラクターにオプション配列を渡します。
次の例えでは、 35ミリ秒のローカルしきい値を指定します。
$options = [ 'replicaSet' => 'repl0', 'readPreference' => new ReadPreference(ReadPreference::RP_SECONDARY_PREFERRED), 'localThresholdMS' => 35, ]; $client = new Client('mongodb://localhost:27017', [], $options);
前の例では、 MongoDB PHPライブラリは、最も近いメンバーのping時間の35ミリ秒以内に、一致するメンバーに読み取りを分散します。
注意
MongoDB PHPライブラリは、 mongos
インスタンスを介してレプリカセットと通信する場合、 localThresholdMS
の値を無視します。 この場合は、 localThresholdコマンドライン オプション を使用します。
API ドキュメント
このガイドで説明されているメソッドまたはタイプの詳細については、次のライブラリAPIドキュメントを参照してください。
startTransaction()
メソッドの詳細については、「 MongoDB$Driver\Session::startTransaction() 」を参照してください。 拡張APIドキュメントを参照してください。