Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル

レプリカセットでの CRUD 操作の実行方法の指定

項目一覧

  • Overview
  • 読み取り操作と書込み操作の設定
  • クライアント構成
  • セッション構成
  • トランザクション構成
  • データベース構成
  • コレクション構成
  • 高度な読み取り構成
  • タグセット
  • LocalThreshold
  • API ドキュメント

このガイドでは、書込み保証 (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 concern)

  • 書込み保証 (write concern)

ライブラリが読み取り操作をルーティングする方法は、 読み込み設定( 読み込み設定 (read preference)) を設定することで制御できます。また、読み取りおよび書込み保証を設定して、ライブラリがレプリカセットに対する読み取りおよび書込み操作の確認を待機する方法も制御できます。

このセクションでは、オプション配列パラメーターを次のいずれかのメソッドに渡すことで、 読み込み設定( 読み込み設定 (read preference)) 、 読み取り保証( 読み取り保証 (read concern)) 、 書込み保証( 書込み保証 (write concern) ) をさまざまなレベルで構成する方法を示します。

この例では、 コンストラクターに配列を渡すことで、 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);

注意

readPreferencereadConcernLevel 、およびwクライアントオプションは string 値を受け入れます。読み取りと書込みの設定を他のレベルで構成する場合は、対応するオプションにMongoDB\Driver\ReadPreferenceMongoDB\Driver\ReadConcernMongoDB\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に指示します。

  1. ニューヨークデータセンターのメンバー( ['dc' => 'ny']

  2. サンフランシスコデータセンターのメンバー( ['dc' => 'sf']

  3. 任意のセカンダリ ノード( []

$readPreference = new ReadPreference(
ReadPreference::RP_SECONDARY,
[
['dc' => 'ny'],
['dc' => 'sf'],
[],
],
);
$db = $client->selectDatabase(
'test_database',
['readPreference' => $readPreference],
);

指定した読み込み設定( 読み込み設定 (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ドキュメントを参照してください。

  • MongoDB\Client::__construct()

  • MongoDB\Client::startSession()

  • MongoDB\Client::selectDatabase()

  • MongoDB\Client::selectCollection()

startTransaction()メソッドの詳細については、「 MongoDB$Driver\Session::startTransaction() 」を参照してください。 拡張APIドキュメントを参照してください。

戻る

大きなファイルの保存