복제본 세트에서 CRUD 작업을 실행하는 방법 지정
개요
이 가이드 에서는 쓰기 고려 (write concern), 읽기 고려 (read concern) 및 읽기 설정 (read preference) 옵션을 구성하여 MongoDB PHP 라이브러리가 복제본 세트에서 생성, 읽기, 업데이트 및 삭제 (CRUD ) 작업을 실행하는 방식을 수정하는 방법을 학습 수 있습니다.
다음 수준에서 쓰기 고려, 읽기 고려, 읽기 설정 옵션을 설정할 수 있습니다.
재정의되지 않는 한 모든 작업 실행에 대한 기본값을 설정하는 클라이언트
Session
트랜잭션
Database
컬렉션
이 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예를 예시 , 트랜잭션 에 읽기 고려 (read concern) 수준을 설정하다 하면 클라이언트 에서 상속된 읽기 고려 (read concern) 수준이 재정의됩니다.
이러한 옵션을 사용하면 복제본 세트에 있는 데이터의 인과적 일관성 과 가용성을 사용자 지정할 수 있습니다. 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 옵션의 전체 목록을 보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.
읽기 및 쓰기 작업 구성
읽기 설정( 읽기 설정 (read preference))을 설정하여 라이브러리가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 및 쓰기 (write) 고려를 설정하여 라이브러리가 복제본 세트 에 대한 읽기 및 쓰기 (write) 작업의 승인을 기다리는 방법을 제어할 수도 있습니다.
이 섹션에서는 다음 메서드 중 하나에 옵션 배열 매개변수를 전달하여 다양한 수준에서 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 를 구성하는 방법을 보여줍니다.
MongoDB\Client::__construct(): 클라이언트 수준 설정을 구성합니다.
MongoDB\Client::startSession(): 세션 수준 설정을 구성합니다.
MongoDB\ 드라이버\Session::startTransaction(): 트랜잭션 수준 설정을 구성합니다.
MongoDB\Client::selectDatabase(): 데이터베이스 수준 설정을 구성합니다.
MongoDB\Client::selectCollection(): 컬렉션 수준 설정을 구성합니다.
클라이언트 구성
이 예시 에서는 생성자에 배열 을 전달하여 MongoDB\Client
인스턴스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 를 설정하다 하는 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.
secondary
읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 합니다.local
읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.2
쓰기 고려 (write concern): 프라이머리 및 세컨더리 복제본 세트 멤버 중 하나가 쓰기 (write) 작업을 확인해야 합니다.
$clientOptions = [ 'readPreference' => 'secondary', 'readConcernLevel' => 'local', 'w' => '2', ]; $client = new Client('mongodb://localhost:27017', $clientOptions);
또는 MongoDB\Client
생성자에 매개 변수로 전달되는 연결 URI에 읽기 및 쓰기 (write) 설정을 지정할 수 있습니다.
$uri = 'mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2'; $client = new Client($uri);
참고
readPreference
, readConcernLevel
및 w
클라이언트 옵션은 string 값을 허용합니다. 다른 수준에서 읽기 및 쓰기 (write) 설정을 구성하는 경우 해당 옵션에 MongoDB\Driver\ReadPreference
, MongoDB\Driver\ReadConcern
및 MongoDB\Driver\WriteConcern
유형의 값을 할당해야 합니다.
세션 구성
이 예시 에서는 startSession()
메서드에 배열 을 전달하여 세션의 읽기 설정 (read preference), 읽기 고려 (read 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) 를 설정하다 하는 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.
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) 를 설정하다 하는 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.
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), ]);
collection 구성
이 예시 에서는 selectCollection()
메서드에 옵션 배열 을 전달하여 test_collection
컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read 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 를 사용하면 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용 할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.
기본값 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 라이브러리는 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.
기본값 라이브러리는 핑 시간이 가장 가까운 멤버의 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 라이브러리는 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버에게 읽기를 분산합니다.
참고
MongoDB PHP 라이브러리는 mongos
인스턴스 를 통해 복제본 세트 와 통신할 때 localThresholdMS
값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.
API 문서
이 가이드 에 설명된 메서드 또는 유형에 학습 보려면 다음 라이브러리 API 문서를 참조하세요.
메서드에 학습 startTransaction()
보려면 MongoDB\ 드라이버\Session::startTransaction() 을( 를) 참조하세요. 확장 API 문서에서 확인 가능합니다.