개요
이 가이드 에서는 Node.js 운전자 사용하여 읽기 및 쓰기 (write) 작업을 구성하는 방법을 학습 수 있습니다.
읽기 및 쓰기 설정
읽기 설정 (read preference) 설정하여 운전자 읽기 작업을 라우팅하는 방법을 제어할 수 있습니다. 또한 읽기 고려 (read concern) 또는 쓰기 고려(write concern) 설정하여 운전자 데이터 일관성 및 내구성을 처리하는 방식을 제어할 수도 있습니다. 읽기 고려는 읽기 작업을 수행할 때 데이터에 필요한 내구성 수준을 지정하고, 쓰기 (write) 고려는 운전자 복제본 세트 에서 쓰기 (write) 작업의 승인을 기다리는 방법을 지정합니다.
다음 수준에서 쓰기 고려, 읽기 고려, 읽기 설정 옵션을 설정할 수 있습니다.
재정의되지 않는 한 모든 작업 실행에 대한 기본값을 설정하는 클라이언트
트랜잭션
Database
컬렉션
앞의 목록은 옵션 설정의 우선 순위가 높아지는 순서도 나타냅니다. 예시 를 들어, 트랜잭션 에 대해 읽기 고려 (read concern) 수준을 설정하다 클라이언트 에 대해 설정하다 읽기 고려 (read concern) 수준이 재정의됩니다.
팁
읽기 및 쓰기 설정에 대해 자세히 알아보려면 MongoDB Server 매뉴얼에서 다음 가이드를 참조하세요.
이 섹션에서는 각 수준에서 읽기 및 쓰기 (write) 설정을 구성하는 방법을 설명합니다.
클라이언트 구성
이 예시 MongoClientOptions
객체 생성자에 전달하여 MongoClient
인스턴스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.
SECONDARY
읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 합니다.local
읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.2
쓰기 고려 (write concern): 프라이머리 및 세컨더리 복제본 세트 멤버 중 하나가 쓰기 (write) 작업을 확인해야 합니다.
const clientOptions = { readPreference: ReadPreference.SECONDARY, readConcern: { level: "local" }, writeConcern: { w: 2 }, }; const client = new MongoClient("mongodb://localhost:27017", clientOptions);
또는 MongoClient
생성자에 매개 변수로 전달되는 연결 URI에 읽기 및 쓰기 (write) 설정을 지정할 수 있습니다.
const uri = "mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2"; const clientWithUri = new MongoClient(uri);
트랜잭션 구성
이 예시 TransactionOptions
객체 startTransaction()
메서드에 전달하여 트랜잭션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여줍니다. 이 코드는 다음 설정을 구성합니다.
PRIMARY
읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 합니다.majority
읽기 고려 (read concern): 읽기 작업은 대부분의 복제본 세트 멤버에 기록된 인스턴스의 가장 최근 데이터를 반환합니다.1
쓰기 고려 (write concern): 프라이머리 복제본 세트 멤버가 쓰기 (write) 작업을 확인해야 합니다.
const transactionOptions = { readPreference: ReadPreference.PRIMARY, readConcern: { level: "majority" }, writeConcern: { w: 1 }, }; const session = client.startSession(); session.startTransaction(transactionOptions);
데이터베이스 구성
이 예시 DbOptions
객체 db()
메서드에 전달하여 test_database
데이터베이스 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.
PRIMARY_PREFERRED
읽기 설정 (read preference) : 읽기 작업은 프라이머리 복제본 세트 멤버에서 데이터를 조회 하거나, 프라이머리 멤버를 사용할 수 없는 경우 세컨더리 멤버에서 데이터를 검색합니다.available
읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.majority
쓰기 고려 (write concern): 모든 복제본 세트 멤버의 대다수가 쓰기 (write) 작업을 승인해야 합니다.
const dbOptions = { readPreference: ReadPreference.PRIMARY_PREFERRED, readConcern: { level: "available" }, writeConcern: { w: "majority" }, }; const db = client.db("test_database", dbOptions);
collection 구성
이 예시 CollectionOptions
객체 collection()
메서드에 전달하여 test_collection
컬렉션 의 읽기 설정 (read preference), 읽기 고려 (read concern) 및 쓰기 고려 (write concern) 설정하다 방법을 보여 줍니다. 이 코드는 다음 설정을 구성합니다.
SECONDARY_PREFERRED
읽기 설정 (read preference) : 읽기 작업은 세컨더리 복제본 세트 멤버에서 데이터를 조회 하거나, 사용 가능한 세컨더리 멤버가 없는 경우 프라이머리 멤버에서 데이터를 검색합니다.available
읽기 고려 (read concern): 읽기 작업은 데이터가 대부분의 복제본 세트 멤버에 기록되었음을 보장하지 않고 인스턴스의 가장 최근 데이터를 반환합니다.0
쓰기 고려 (write concern) : 쓰기 (write) 작업에 대한 승인을 요청 하지 않습니다.
const collOptions = { readPreference: ReadPreference.SECONDARY_PREFERRED, readConcern: { level: "available" }, writeConcern: { w: 0 }, }; const collection = db.collection("test_collection", collOptions);
태그 세트
MongoDB Server에서는 선택한 기준에 따라 복제본 세트 멤버에 키-값 태그 를 적용할 수 있습니다. 그런 다음 해당 태그를 사용하여 읽기 작업의 멤버를 한 명 이상 대상으로 지정할 수 있습니다.
기본값 으로 Node.js 운전자 읽을 멤버를 선택할 때 태그를 무시합니다. Node.js 운전자 특정 태그를 선호하도록 지시하려면 해당 태그를 읽기 설정 (read preference) 클래스 생성자에 매개변수로 전달합니다.
이 코드 예시 readPreference
옵션을 태그 세트 에 설정하여 test_database
가 다음 순서로 세컨더리 복제본 세트 멤버로부터 읽기를 선호하도록 지시합니다.
뉴욕 데이터 센터 (
{ dc: 'ny' }
)의 멤버샌프란시스코 데이터 센터 (
{ dc: 'sf' }
)의 멤버모든 세컨더리 멤버(
{}
)
const taggedReadPreference = new ReadPreference( ReadPreference.SECONDARY, [ { dc: "ny" }, { dc: "sf" }, {} ] ); const dbWithTags = client.db( "test_database", { readPreference: taggedReadPreference } );
LocalThreshold
여러 복제본 세트 멤버가 지정한 읽기 설정 (read preference) 및 태그를 지정하다 세트와 일치하는 경우 Node.js 운전자 핑 시간에 따라 선택된 가장 가까운 복제본 세트 멤버에서 읽습니다.
기본적으로 드라이버는 핑 시간이 가장 가까운 멤버의 15 밀리초 이내인 멤버만 쿼리에 사용합니다. 지연 시간이 더 긴 멤버 간에 읽기를 분산하려면 localThresholdMS
옵션을 MongoClient()
생성자에 전달합니다.
다음 예에서는 로컬 임계값을 35 밀리초로 지정합니다.
const clientWithLocalThreshold = new MongoClient("mongodb://localhost:27017", { replicaSet: "repl0", readPreference: ReadPreference.SECONDARY_PREFERRED, localThresholdMS: 35 });
앞의 예시 에서 Node.js 운전자 가장 가까운 멤버의 핑 시간 35 밀리초 이내에 일치하는 멤버 간에 읽기를 분산합니다.
참고
Node.js 운전자 mongos
인스턴스 통해 복제본 세트 와 통신할 때 localThresholdMS
값을 무시합니다. 이 경우 localThreshold 명령줄 옵션을 사용합니다.
데이터 정렬
데이터 정렬 을 지정하여 읽기 및 쓰기 (write) 작업의 동작을 수정할 수 있습니다. 데이터 정렬은 대소문자 및 악센트 표시와 같이 문자열 비교를 위한 언어별 규칙 설정하다 입니다.
MongoDB 기본값으로 바이너리 데이터 정렬 을 사용하여 문자열을 정렬합니다. 이 기본값 정렬은 ASCII 표준 문자 값을 사용하여 문자열을 비교하고 정렬합니다. 언어 및 국가 및 언어 설정에는 ASCII 표준과 다른 특정 문자 순서 규칙이 있으며, 작업에 다른 데이터 정렬 규칙 설정하다 적용 하도록 선택할 수 있습니다.
다음 수준에서 데이터 정렬을 지정할 수 있습니다.
컬렉션: 컬렉션 작업에 대한 기본값 데이터 정렬을 설정합니다. 기존 컬렉션 에 대해서는 데이터 정렬을 정의할 수 없습니다.
인덱스: 인덱스 사용하는 작업에 대한 데이터 정렬을 설정합니다.
작업: 작업의 데이터 정렬을 설정하고 상속된 모든 데이터 정렬을 재정의합니다.
데이터 정렬 필드
데이터 정렬 객체 에는 다음 필드가 포함되어 있습니다.
collation: { locale: <string>, caseLevel: <bool>, caseFirst: <string>, strength: <int>, numericOrdering: <bool>, alternate: <string>, maxVariable: <string>, backwards: <bool> }
collation
옵션을 설정할 때 locale
필드 지정해야 합니다. 다른 모든 필드는 선택 사항입니다. 지원되는 국가 및 언어 설정의 전체 목록과 locale
필드의 기본값은 MongoDB Server 매뉴얼에서 지원되는 언어 및 국가 및 언어 설정 을 참조하세요.
데이터 정렬 예시
데이터 정렬을 지정하려면 collation
객체 만들고 해당 locale
필드 사용하려는 언어 데이터 정렬로 설정하다 . 그런 다음 이 객체 대상 데이터 정렬 수준에 해당하는 메서드에 옵션 매개 변수로 전달합니다.
이 섹션에는 컬렉션, 인덱스 및 작업 수준에서 데이터 정렬을 설정하다 예제가 포함되어 있습니다.
컬렉션 및 인덱스 데이터 정렬 설정
다음 예시 names
이라는 새 컬렉션 만들고 기본값 데이터 정렬을 "fr_CA"
국가 및 언어 설정 설정으로 설정합니다.
const db = client.db("db") db.createCollection("names", { collation: { locale: "fr_CA" }, });
다음 예시 와 같이 names
컬렉션 에 다른 데이터 정렬을 지정하는 인덱스 만들 수 있습니다.
const coll = db.collection("names"); coll.createIndex( { "last_name" : 1 }, { "collation" : { "locale" : "en_US" } });
작업 데이터 정렬 설정
이전 섹션에서 만든 names
컬렉션에서 기본값 데이터 정렬을 재정의하는 작업을 실행 수 있습니다.
names
컬렉션에는 다음 문서가 포함되어 있습니다.
{ "_id" : 1, "first_name" : "Hans", "last_name" : "Muller" } { "_id" : 2, "first_name" : "Gunter", "last_name" : "Braun" } { "_id" : 3, "first_name" : "Günter", "last_name" : "Krause" } { "_id" : 4, "first_name" : "Jürgen", "last_name" : "Weber" }
이 예시 findOneAndUpdate()
메서드를 호출하여 first_name
값이 "Gunter"
인 첫 번째 일치 문서 업데이트 . 이 코드는 "de"
국가 및 언어 설정 및 "phonebook"
국가 및 언어 설정 변형을 사용하여 데이터 정렬을 적용합니다.
coll.findOneAndUpdate( { first_name: { $lt: "Gunter" } }, { $set: { verified: true } }, { collation: { locale: "de@collation=phonebook" } }, );
앞의 예시 에서 phonebook
국가 및 언어 설정 설정 변형은 운전자 에 움라우트가 있는 문자를 움라우트가 없는 동일한 문자보다 먼저 정렬하도록 지시합니다. 결과적으로 이 작업은 first_name
값이 "Günter"
인 문서 움라우트와 일치시키고 다음 업데이트 정보를 반환합니다.
{ lastErrorObject: { updatedExisting: true, n: 1 }, value: { _id: 3, first_name: 'Günter', last_name: 'Krause' }, ok: 1 }
팁
국가 및 언어 설정 변형에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 로컬 변형 을 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.