Docs Menu
Docs Home
/ / /
Go 드라이버
/ /

CRUD 작업 실행 수정하기

이 페이지의 내용

  • 개요
  • 쓰기 고려
  • readConcern
  • 읽기 설정
  • 추가 정보

이 가이드에서는 MongoDB Go 드라이버가 복제본 세트의 쓰기 고려(write concern), 읽기 고려(read concern)읽기 설정(read preference) 구성을 사용하여 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 실행하는 방식을 수정하는 방법을 배울 수 있습니다.

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

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

  • 세션 수준

  • 트랜잭션 수준

  • 데이터베이스 수준

  • 컬렉션 수준

다음 섹션에서는 복제본 세트에 있는 데이터의 일관성과 가용성을 사용자 정의하는 방법을 알아볼 수 있습니다.

쓰기 고려 (write concern)는 삽입 또는 업데이트와 같은 쓰기 작업을 승인해야 작업이 성공한 것으로 반환되기 전에 복제본 세트 내 데이터 보유 노드의 수를 설명합니다. 기본적으로, 쓰기 고려 (write concern)는 작업이 성공한 것으로 간주되기 전에 프라이머리 복제본 세트 멤버만 쓰기 작업을 승인하면 됩니다.

MongoDB Go 드라이버는 복제본 세트에 대한 쓰기 고려 (write concern)를 지정할 수 있는 writeconcern 패키지를 제공합니다. WriteConcern 유형의 SetWriteConcern() 메서드를 사용하여 쓰기 고려 (write concern)를 설정합니다. WriteConcern 유형에는 다음과 같은 방법으로 일반적인 쓰기 고려 (write concern) 사양을 선택할 수 있습니다.

메서드
설명

Custom()

The client requests acknowledgement that write operations propagate to tagged members of a mongod instance. For more information, see the Write Concern specification.

Parameter: string

Journaled()

The client requests acknowledgement that write operations are written to the on-disk journal. For more information, see the Write Concern specification.

Parameter: none

Majority()

The client requests acknowledgement that write operations propagate to the majority of data-bearing voting members. For more information, see the Write Concern specification.

Parameter: none

Unacknowledged()

The client requests requests no acknowledgment of write operations. For more information, see the Write Concern specification for w: 0.

Parameter: none

W1()

The client requests acknowledgement that write operations have been written to memory on one node, such as the standalone mongod or the primary in a replica set. For more information, see the Write Concern specification for w: 1.

Parameter: none

쓰기 고려 시간 초과

WriteConcern 인스턴스 에는 시간 초과를 설정하다 수 없습니다. 대신 WithTimeout() 컨텍스트를 생성할 때 메서드를 사용하여 작업 수준에서 시간 초과를 설정하다 . 자세한 학습 은 연결 옵션 가이드 의 단일 시간 제한 설정을 참조하세요.

보다 특수한 쓰기 고려가 필요한 경우 사용자 지정 WriteConcern 구조체 리터럴을 정의할 수 있습니다. WriteConcern 구조체에 다음 필드를 설정할 수 있습니다.

필드
설명

W

Specifies the number of mongod instances or tagged members that write operations must propagate to for acknowledgement. Common values include 1, 0, and "majority".

Type: string or int

Journal

Specifies if write operations must be written to the on-disk journal for acknowledgement.

Type: bool

또는 연결 string 에 쓰기 고려를 지정할 수 있습니다. 자세한 내용은 쓰기 고려 옵션에 대한 MongoDB Server 매뉴얼 항목 을 참조하세요.

다음 코드는 클라이언트 및 collection 수준에서 다양한 쓰기 고려 (write concern)를 지정하는 방법을 보여줍니다. 클라이언트 수준 쓰기 고려 (write concern)는 두 개의 복제본 세트 구성원에게 승인을 요청하고 저널링을 false 으로 설정합니다. 컬렉션 수준 쓰기 고려는 대부분의 복제본 세트 멤버에게 승인을 요청합니다.

uri := "mongodb://<hostname>:<port>"
journal := false
cliWC := &writeconcern.WriteConcern{
W: 2,
Journal: &journal,
}
clOpts := options.Client().ApplyURI(uri).SetWriteConcern(cliWC)
client, err := mongo.Connect(clOpts)
...
collWC := writeconcern.Majority()
collOpts := options.Collection().SetWriteConcern(collWC)
coll := client.Database("db").Collection("myColl", collOpts)

사용자는 읽기 고려 (read concern) 옵션을 통해 클라이언트가 쿼리에서 반환하는 데이터를 결정할 수 있습니다. 기본 읽기 고려 (read concern) 수준은 "local"인데, 클라이언트가 최신 인스턴스 데이터를 반환하며 데이터가 복제본 세트 노드의 대부분에 쓰였다는 보장은 없다는 의미입니다.

MongoDB Go 드라이버는 복제본 세트에 대한 읽기 고려를 지정할 수 있는 readconcern 패키지를 제공합니다. ReadConcern 유형과 함께 SetReadConcern() 메서드를 사용하여 읽기 고려를 설정합니다. ReadConcern 유형에는 읽기 고려를 지정하는 다음과 같은 메서드가 있습니다.

메서드
설명

Available()

쿼리는 데이터가 대부분의 복제본 세트 멤버에 기록되었다는 보장 없이 인스턴스에서 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

Linearizable()

쿼리는 majority 쓰기 고려로 발행되고 읽기 작업이 시작되기 전에 승인된 모든 성공적인 쓰기를 반영하는 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

Local()

쿼리는 인스턴스의 가장 최근 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

Majority()

이 쿼리는 복제본 세트의 과반수 이상의 멤버에 기록된 것으로 확인된 인스턴스의 가장 최근 데이터를 반환합니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

Snapshot()

쿼리는 특정 시점의 mongod 인스턴스에 있는 데이터의 전체 복사본을 반환합니다. 다중 문서 트랜잭션 내의 작업에만 사용할 수 있습니다. 자세한 내용은 읽기 고려 사양을 참조하세요.

다음 코드는 "majority"의 읽기 고려 (read concern)를 지정하는 방법을 보여줍니다. 그런 다음 코드는 이 옵션을 사용하여 Collection 를 선택합니다.

rc := readconcern.Majority()
opts := options.Collection().SetReadConcern(rc)
database := client.Database("db")
coll := database.Collection("myCollection", opts)

읽기 설정 (read preference) 옵션은 MongoDB 클라이언트가 읽기 작업을 복제본 세트의 노드로 라우팅하는 방법을 지정합니다. 애플리케이션은 기본값으로 복제본 세트의 프라이머리 노드에 읽기 작업을 지시합니다.

읽기 설정은 읽기 설정 모드와 선택적으로 태그 세트 목록, maxStalenessSeconds 옵션 및 헤지된 읽기( hedged read ) 옵션으로 구성됩니다.

MongoDB Go 드라이버는 복제본 세트에 대한 읽기 설정을 지정할 수 있는 readpref 패키지를 제공합니다. ReadPref 유형과 함께 SetReadPreference() 메서드를 사용하여 읽기 설정을 지정합니다. ReadPref 유형에는 다음과 같은 메서드로 읽기 설정을 지정할 수 있습니다.

메서드
설명

Nearest()

클라이언트는 지정된 지연 시간 임계값에 따라 프라이머리 또는 세컨더리의 임의의 적격 복제본 세트 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

Primary()

클라이언트는 현재 복제본 세트 프라이머리 노드에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

PrimaryPreferred()

클라이언트는 대부분의 상황에서 프라이머리 노드에서 읽습니다. 프라이머리를 사용할 수 없는 경우 작업은 세컨더리 멤버로부터 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

Secondary()

클라이언트는 복제본 세트의 세컨더리 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

SecondaryPreferred()

클라이언트는 대부분의 상황에서 세컨더리 노드에서 읽습니다. 세컨더리를 사용할 수 없는 경우 작업은 프라이머리 멤버에서 읽습니다. 자세한 내용은 읽기 설정 MongoDB Server 수동 항목을 참조하세요.

또는 연결 string 에 읽기 설정을 지정할 수 있습니다. 자세한 내용은 읽기 설정 옵션에 대한 MongoDB Server 수동 항목을 참조하세요.

다음 코드는 세컨더리 노드에서 읽도록 읽기 설정을 지정하는 방법을 보여줍니다. 그런 다음 코드는 이 옵션을 사용하여 Database를 선택합니다.

rp := readpref.Secondary()
opts := options.Database().SetReadPreference(rp)
database := client.Database("db", opts)

이 가이드에 나오는 개념이 자세히 알고 싶다면 다음 서버 문서를 확인하세요.

돌아가기

복합 작업