Docs Menu
Docs Home
/ /

CRUD 작업 구성

이 가이드 에서는 쓰기 고려 (write concern), 읽기 고려 (read concern)읽기 설정 (read preference) 옵션을 구성하여 C++ 운전자 복제본 세트에서 읽기 및 쓰기 (write) 작업을 실행하는 방식을 수정하는 방법을 학습 수 있습니다.

다음 수준에서 쓰기 고려, 읽기 고려, 읽기 설정 옵션을 설정할 수 있습니다.

  • 트랜잭션

  • Database

  • 컬렉션

이 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예시 를 들어, 데이터베이스 에 대해 읽기 고려 (read concern) 설정하다 하면 트랜잭션 에서 상속된 읽기 고려 (read concern) 설정이 재정의됩니다.

읽기 설정( read preference)을 설정하여 드라이버가 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 및 쓰기 고려를 설정하여 드라이버가 복제본 세트에 대한 읽기쓰기 작업의 승인을 기다리는 방법에 대한 옵션을 제어할 수도 있습니다.

읽기 및 쓰기 (write) 설정과 해당 옵션에 대해 자세히 학습 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

  • 읽기 설정

  • readConcern

  • 쓰기 고려

기본값 읽기 및 쓰기 (write) 설정에 대한 자세한 내용은 MongoDB Server 매뉴얼의 기본 MongoDB 읽기 고려/쓰기 고려를 참조하세요.

트랜잭션은 순차적으로 실행 start_session() 하려는 관련 읽기 또는 쓰기 (write) 작업의 mongocxx::options::transaction 그룹인 세션 내에서 실행 . 메서드를 사용하여 트랜잭션에 사용할 세션을 가져옵니다. 그런 다음 객체 세션의 with_transaction() 메서드에 전달합니다. 이 예시 트랜잭션 의 읽기 설정 (read preference), 읽기 고려 (read concern)) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다.

세션에 대해 자세히 학습 MongoDB Server 매뉴얼의 서버 세션을 참조하세요.

이 예시 다음 설정을 구성합니다.

  • k_primary 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 .

  • k_majority 읽기 고려 (read concern): 읽기 작업은 대부분의 복제본 세트 멤버에 기록된 인스턴스의 가장 최근 데이터를 반환합니다.

  • k_acknowledged 쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버는 쓰기 (write) 작업을 확인해야 합니다.

auto session = client.start_session();
mongocxx::options::transaction txn_opts;
{
mongocxx::read_preference rp;
mongocxx::read_concern rc;
mongocxx::write_concern wc;
rp.mode(mongocxx::read_preference::read_mode::k_primary);
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
txn_opts.read_preference(rp);
txn_opts.read_concern(rc);
txn_opts.write_concern(wc);
}
session.with_transaction([&](mongocxx::client_session*) {
// Specify transaction operations here
}, txn_opts);

이 예시 데이터베이스 에 대해 다음 읽기 설정을 구성하는 방법을 보여 줍니다.

  • k_secondary 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서만 데이터를 조회 .

  • k_majority 읽기 고려 (read concern): 읽기 작업은 대부분의 복제본 세트 멤버에 기록된 인스턴스의 가장 최근 데이터를 반환합니다.

auto db = client["test_database"];
mongocxx::read_preference rp;
mongocxx::read_concern rc;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
db.read_preference(rp);
db.read_concern(rc);

이 예시 컬렉션 에 대해 다음과 같은 읽기 및 쓰기 고려 (write concern) 설정을 지정하는 방법을 보여 줍니다.

  • k_local 읽기 고려 (read concern): 읽기 작업은 인스턴스의 가장 최근 데이터를 반환하며, 데이터가 대부분의 복제본 세트 멤버에 기록되었다는 보장은 없습니다.

  • k_acknowledged 쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버는 쓰기 (write) 작업을 확인해야 합니다.

auto coll = client["test_database"]["test_collection"];
mongocxx::read_concern rc;
mongocxx::write_concern wc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
coll.read_concern(rc);
coll.write_concern(wc);

MongoDB Server 에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그를 적용 할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.

기본값 으로 C++ 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. C++ 운전자 특정 태그를 선호하도록 하려면 mongocxx::read_preference 객체 만들고 해당 tags() 멤버 함수를 호출합니다. 원하는 태그를 배열 인수로 tags()에 전달합니다.

다음 코드 예시 에서 tags() 함수에 전달된 태그 세트 C++ 운전자 뉴욕 데이터 센터 ("dc": "ny")에서 읽기를 선호하고 샌프란시스코 데이터 센터 ("dc": "sf")로 대체하도록 지시합니다.

auto tag_set_ny = make_document(kvp("dc", "ny"));
auto tag_set_sf = make_document(kvp("dc", "sf"));
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rp.tags(make_array(tag_set_ny, tag_set_sf).view());

C++ 운전자 네트워크 또는 서버 오류로 인해 특정 읽기 및 쓰기 (write) 작업이 실패한 경우 자동으로 한 번 다시 시도합니다.

연결 URI에서 retryReads 또는 retryWrites 옵션을 false 로 설정하여 재시도 가능 읽기 또는 재시도 가능 쓰기를 명시적으로 비활성화할 수 있습니다. 다음 예시 클라이언트 에 대해 재시도 가능 읽기 및 쓰기를 비활성화합니다.

mongocxx::uri uri{"mongodb://localhost:27017/?retryReads=false&retryWrites=false"};
mongocxx::client client{uri};

지원되는 재시도 가능 읽기 및 쓰기 (write) 작업에 대해 자세히 학습 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

샤딩된 클러스터 또는 복제본 세트 에 연결할 때 C++ 운전자 로드 밸런싱을 사용하여 읽기 및 쓰기 (write) 요청을 처리하다 . 로드 밸런싱을 통해 운전자 이러한 요청을 여러 서버에 분산할 수 있으므로 하나의 서버 과부하가 걸리는 것을 방지하고 최적의 성능을 보장합니다.

샤딩된 클러스터 에 연결할 때 C++ 운전자 네트워크 mongos 왕복 시간이 가장 짧은 인스턴스를 계산하여 가장 가까운 인스턴스 결정합니다. 그런 다음 운전자 이 mongos 의 평균 왕복 시간을 localThresholdMS 값에 추가하여 지연 시간 창 결정합니다. 운전자 지연 시간 창 내에 속하는 최대 2개의 무작위 인스턴스에 요청을 로드 밸런싱합니다.mongos 각 요청 에 대해 운전자 operationCount 값을 결정하여 작업 부하가 낮은 서버 선택합니다.

복제본 세트 에 연결할 때 C++ 운전자 먼저 읽기 설정 (read preference) 에 따라 복제본 세트 멤버를 선택합니다. 그런 다음 운전자 이전 단락에서 설명한 것과 동일한 프로세스 따릅니다. 지연 시간 창 계산한 후 운전자 이 창 에 속하는 무작위 복제본 세트 멤버를 최대 두 개 선택하고 operationCount 값이 더 작은 멤버를 선택하여 요청 받습니다.

로드 밸런싱에 대해 자세히 학습하려면 MongoDB Server 매뉴얼에서 샤드 클러스터 밸런서 를 참조하세요.

C++ 운전자 로컬 임계값을 사용하여 서버 선택에 대한 지연 시간 창 계산합니다. 이 값은 읽기 및 쓰기 (write) 요청을 수신할 수 있는 서버를 결정합니다.

기본값 으로 운전자 핑 시간이 가장 가까운 서버 에서 15 밀리초 이내인 mongos 인스턴스 또는 복제본 세트 멤버만 사용합니다. 지연 시간이 더 긴 서버에 읽기를 분산하려면 연결 URI에서 localThreshold 매개 변수를 설정하다 .

참고

단일 인스턴스 에서 복제본 세트 멤버를 선택할 mongos 때 C++ localThresholdMS 운전자 옵션을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

다음 예시 에서는 복제본 세트 에 연결하고 로컬 임계값을 35 밀리초로 지정합니다.

mongocxx::uri uri{"mongodb://localhost:27017/?replicaSet=repl0&localThresholdMS=35"};
mongocxx::client client{uri};

앞의 예시 에서 C++ 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버에게 읽기를 분산합니다.

컬렉션에서 읽기 및 쓰기 (write) 작업을 수행할 때 데이터 정렬 을 지정할 수 있습니다.

데이터 정렬은 대소문자 및 악센트 표시와 같이 문자열 비교를 위한 언어별 규칙 설정하다 입니다.

데이터 정렬을 지정하려면 데이터 정렬 정의를 옵션 객체 의 collation() 메서드에 전달한 다음 이 옵션 객체 읽기 또는 쓰기 (write) 작업에 전달합니다.

다음 문서가 포함된 컬렉션 생각해 보세요.

{ _id: 1, category: "café" },
{ _id: 2, category: "cafe" },
{ _id: 3, category: "cafE" }

다음 예시 프랑스어 국가 및 언어 설정 설정을 지정하고 대소문자와 문자 변형 간의 차이를 무시하는 데이터 정렬을 만듭니다. 그런 다음 이 데이터 정렬을 사용하여 category 필드 값이 "cafe"와 일치하는 문서를 찾습니다. 지정된 데이터 정렬로 인해 쿼리 세 개의 문서를 모두 반환합니다.

mongocxx::options::find opts{};
opts.collation(bsoncxx::from_json(R"({"locale": "fr", "strength": 1})"));
auto cursor = collection.find(make_document(kvp("category", "cafe")), opts);
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id": { "$oid" : "1" }, "category": "café" }
{ "_id": { "$oid" : "2" }, "category": "cafe" }
{ "_id": { "$oid" : "3" }, "category": "cafE" }

이 가이드 에 설명된 클래스 또는 메서드에 학습 보려면 다음 API 설명서를 참조하세요.

돌아가기

스레드 및 포크 안전성

이 페이지의 내용