Docs Menu
Docs Home
/ /

복제본 세트에 대한 작업 구성

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

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

  • 재정의되지 않는 한 모든 작업 실행에 대한 기본값을 설정하는 클라이언트

  • 트랜잭션

  • Database

  • 컬렉션

이 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예를 예시 , 트랜잭션 에 읽기 고려 (read concern) 수준을 설정하다 하면 클라이언트 에서 상속된 읽기 고려 (read concern) 수준이 재정의됩니다.

쓰기 고려, 읽기 고려 (read concern) 및 읽기 설정 (read preference) 옵션을 사용하면 복제본 세트에 있는 데이터의 인과적 일관성 과 가용성을 사용자 지정할 수 있습니다. 이러한 옵션의 전체 목록을 보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.

  • 읽기 설정

  • readConcern

  • 쓰기 고려

읽기 설정 (read preference) 설정하여 운전자 복제본 세트 멤버 간에 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 및 쓰기 (write) 고려를 설정하여 운전자 복제본 세트 에서 읽기 및 쓰기 (write) 작업의 승인을 기다리는 방법을 제어할 수도 있습니다.

다음 섹션에서는 다양한 수준에서 이러한 읽기 및 쓰기 (write) 설정을 구성하는 방법을 보여줍니다.

이 예시 MongoClientSettings 인스턴스 생성자에 전달하여 MongoClient 인스턴스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

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

  • LOCAL 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • W2 쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버와 한 명의 세컨더리 멤버가 쓰기 (write) 작업을 확인해야 합니다.

val mongoClient = MongoClient(MongoClientSettings.builder()
.applyConnectionString(ConnectionString("mongodb://localhost:27017/"))
.readPreference(ReadPreference.secondary())
.readConcern(ReadConcern.LOCAL)
.writeConcern(WriteConcern.W2)
.build())

또는 MongoClient 생성자에 매개 변수로 전달되는 연결 URI에 읽기 및 쓰기 (write) 설정을 지정할 수 있습니다.

val uriClient = MongoClient("mongodb://localhost:27017/?readPreference=secondary&w=2&readConcernLevel=local")

이 예시 TransactionOptions 인스턴스 startTransaction() 메서드에 전달하여 트랜잭션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 트랜잭션은 순차적으로 실행 하려는 관련 읽기 또는 쓰기 (write) 작업을 그룹화한 세션 내에서 실행 . 트랜잭션 옵션을 구성하기 전에 ClientSession 인스턴스 생성하여 세션을 시작합니다.

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

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

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

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

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

val clientSessionFuture = mongoClient.startSession().toFuture()
val clientSession = Await.result(clientSessionFuture, Duration(10, TimeUnit.SECONDS))
val tOptions: TransactionOptions = TransactionOptions.builder()
.readPreference(ReadPreference.primary())
.readConcern(ReadConcern.MAJORITY)
.writeConcern(WriteConcern.W1)
.build()
clientSession.startTransaction(tOptions)

이 예시 setter 메서드를 getDatabase() 메서드에 연결하여 test_database 데이터베이스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • primaryPreferred 읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 , 프라이머리 사용할 수 없는 경우 세컨더리 멤버에서 데이터를 검색합니다.

  • AVAILABLE 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • MAJORITY 쓰기 고려 (write concern): 모든 복제본 세트 멤버의 대다수가 쓰기 (write) 작업을 승인해야 합니다.

val database = mongoClient.getDatabase("test_database")
.withReadPreference(ReadPreference.primaryPreferred())
.withReadConcern(ReadConcern.AVAILABLE)
.withWriteConcern(WriteConcern.MAJORITY)

이 예시 setter 메서드를 getCollection() 메서드에 연결하여 test_collection 컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.

  • secondaryPreferred 읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버 또는 사용 가능한 세컨더리 멤버가 없는 경우 프라이머리 멤버에서 데이터를 조회 .

  • AVAILABLE 읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.

  • UNACKNOWLEDGED 쓰기 고려 (write concern): 복제본 설정하다 멤버는 쓰기 (write) 작업을 승인할 필요가 없습니다.

val collection = database.getCollection("test_collection")
.withReadPreference(ReadPreference.secondaryPreferred())
.withReadConcern(ReadConcern.AVAILABLE)
.withWriteConcern(WriteConcern.UNACKNOWLEDGED)

다음 섹션에서는 스칼라 운전자 복제본 세트 멤버에서 읽는 방법을 추가로 사용자 지정하는 방법을 설명합니다.

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

기본값 으로 스칼라 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. 스칼라 운전자 특정 태그를 선호하도록 지시하려면 읽기 설정 (read preference) 설정자 메서드에 태그를 목록으로 전달합니다.

미국 전역의 여러 데이터 센터에서 호스팅되는 멤버가 포함된 복제본 세트 에 연결되어 있다고 가정해 보겠습니다. 운전자 다음 순서로 세컨더리 복제본 세트 멤버로부터 읽기를 선호하도록 하려고 합니다.

  1. 다음과 같이 태그가 지정된 뉴욕 데이터 센터 의 멤버 ("dc", "ny")

  2. 다음과 같이 태그가 지정된 샌프란시스코 데이터 센터 의 멤버 ("dc", "sf")

  3. 모든 세컨더리 멤버

이 코드 예시 이전 복제본 세트 멤버를 나타내는 태그 목록을 ReadPreference.secondary() setter 메서드에 전달합니다. 그런 다음 이 코드는 읽기 설정 (read preference) 정보를 withReadPreference() 메서드에 전달하여 데이터베이스 에서 읽기 순서를 설정하다 .

val tag1 = new TagSet(new Tag("dc", "ny"))
val tag2 = new TagSet(new Tag("dc", "sf"))
val tag3 = new TagSet()
val readPreference = ReadPreference.secondary(List(tag1, tag2, tag3).asJava)
val database = mongoClient.getDatabase("test_database")
.withReadPreference(readPreference)

여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우 스칼라 운전자 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.

기본값 으로 운전자 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 MongoClientSettings 인스턴스 에서 localThreshold 옵션을 설정하다 하거나 연결 URI에서 localThresholdMS 옵션을 설정합니다.

다음 예시 로컬 임계값을 35 밀리초로 지정합니다. MongoClientSettings 또는 Connection URI 탭 선택하여 각 접근 방식에 해당하는 코드를 확인합니다.

val client = MongoClient(MongoClientSettings.builder()
.applyConnectionString(ConnectionString("mongodb://localhost:27017/"))
.applyToClusterSettings(builder => builder
.localThreshold(35, TimeUnit.MILLISECONDS)
)
.build())
val connectionString = "mongodb://localhost:27017/?replicaSet=repl0&localThresholdMS=35"
val client = MongoClient(connectionString)

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

참고

스칼라 운전자 mongos 인스턴스 통해 복제본 세트 와 통신할 때 localThresholdMS 옵션을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

대용량 파일 저장

이 페이지의 내용