Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Rust 드라이버
/

비동기 및 동기 API

이 가이드에서는 Rust 드라이버의 비동기동기 API에 대해 알아볼 수 있습니다. 이 가이드에서는 사용 가능한 API를 활성화하고 각각을 사용하도록 코드를 구성하는 방법을 설명합니다.

Rust 드라이버는 널리 사용되는 두 가지 비동기 런타임 크레이트인 tokioasync-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 크레이트의 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를 사용하려면 "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를 모두 사용할 수 있습니다. 예를 들어 두 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 문서를 참조하세요.

돌아가기

성능 고려 사항

이 페이지의 내용