개요
이 가이드에서는 Rust 드라이버의 비동기 및 동기 API에 대해 알아볼 수 있습니다. 이 가이드에서는 사용 가능한 API를 활성화하고 각각을 사용하도록 코드를 구성하는 방법을 설명합니다.
Rust 드라이버는 널리 사용되는 두 가지 비동기 런타임 크레이트인 tokio
및 async-std
를 지원합니다. 기본적으로 드라이버는 tokio
비동기 런타임을 사용하지만 Cargo.toml
파일의 mongodb
종속성에 기능 플래그를 추가하여 특정 런타임을 선택할 수 있습니다.
드라이버에는 차단이 필요하거나 병렬 처리가 필요하지 않은 사용 사례를 위한 동기 API도 포함되어 있습니다. Cargo.toml
파일의 mongodb
종속성에 기능 플래그를 추가하여 동기 API를 선택할 수 있습니다.
비동기 런타임 구성
드라이버는 기본적으로 tokio
런타임을 사용합니다. mongodb
종속성에 "tokio-runtime"
또는 "async-std-runtime"
기능 플래그를 추가하여 런타임을 명시적으로 선택할 수 있습니다.
다음 탭에서 선택하여 각 크레이트에 대한 기능 플래그를 추가하는 방법을 확인합니다.
[dependencies.mongodb] version = "2.8.2" features = ["tokio-runtime"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["async-std"]
운전자 설치 및 기능 플래그 추가에 대한 자세한 내용은 빠른 시작의 다운로드 및 설치 단계를 참조하세요.
Tokio 런타임 예제
다음 코드는 tokio
크레이트의 task
모듈을 사용하여 여러 데이터 작업에 대한 별도의 동시 작업을 생성합니다.
let client = Client::with_uri_str("<connection string>").await?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); task::spawn(async move { let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref, None).await }); }
동기식 API 구성
이 드라이버는 블로킹 동기 API도 제공합니다. 동기 API를 사용하려면 "sync"
또는 "tokio-sync"
기능 플래그 중 하나를 mongodb
종속성에 추가합니다.
다음 탭에서 선택하여 각 크레이트에 대한 기능 플래그를 추가하는 방법을 확인합니다.
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["sync"]
[dependencies.mongodb] version = "2.8.2" default-features = false features = ["tokio-sync"]
동기식 코드 예제
동기 API를 사용하는 경우 mongodb::sync
모듈의 유형을 사용하여 작업을 수행합니다. 다음 코드에서는 sync
모듈을 사용하여 동기 API를 사용하여 collection에 데이터를 삽입합니다. insert_one
메서드가 for
루프 내에서 실행되면 드라이버는 각 요청이 완료될 때까지 기다렸다가 계속 진행합니다.
use mongodb::sync::Client; fn main() { let client = Client::with_uri_str("<connection string>")?; let some_data = doc! { "title": "1984", "author": "George Orwell" }; for i in 0..5 { let client_ref = client.clone(); let somedata_ref = some_data.clone(); let collection = client_ref .database("items") .collection::<Document>(&format!("coll{}", i)); collection.insert_one(somedata_ref, None); } }
비동기 및 동기 API 모두 사용
동일한 애플리케이션에서 비동기 및 동기 API를 모두 사용할 수 있습니다. 예를 들어 두 tokio
런타임을 모두 활성화하려면 종속성 목록에 tokio
종속성을 추가하고 mongodb
종속성에 "tokio-sync"
플래그를 추가하면 됩니다.
[dependencies] futures = "0.3.28" tokio = {version = "1.32.0", features = ["full"]} [dependencies.mongodb] version = "2.8.2" features = ["tokio-sync"]
추가 정보
이 가이드의 개념에 대한 자세한 내용은 다음 페이지를 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.