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 と同期 API

このガイドでは、Rust ドライバーの非同期API と同期API について学習できます。 このガイドでは、利用可能な API を有効にし、それぞれを使用するようにコードを構造化する方法について説明します。

Rust ドライバーは、2 つの一般的な非同期ランタイム クライアントである tokioasync-stdをサポートしています。 デフォルトでは、ドライバーはtokio非同期ランタイムを使用しますが、 Cargo.tomlファイルのmongodb依存関係に機能フラグを追加することで、特定のランタイムを選択できます。

このドライバーには、ブロッキングが必要なユースケースや並列処理が必要ない場合のための同期 APIも含まれています。 同期 API を選択するには、 Cargo.tomlファイルのmongodb依存関係に機能フラグを追加します。

ドライバーはデフォルトでtokioランタイムを使用します。 "tokio-runtime"または"async-std-runtime"の機能フラグをmongodb依存関係に追加することで、ランタイムを明示的に選択できます。

対応する各クローンに機能フラグを追加する方法を確認するには、次のタブから を選択します。

[dependencies.mongodb]
version = "2.8.2"
features = ["tokio-runtime"]
[dependencies.mongodb]
version = "2.8.2"
default-features = false
features = ["async-std"]

ドライバーのインストールと機能フラグの追加の詳細については、クイック スタートの「 ダウンロードとインストール」のステップを参照してください。

次のコードでは、 tokio crate の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 を使用してコレクションにデータを挿入します。 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ドキュメントを参照してください。

戻る

パフォーマンスに関する考慮事項

項目一覧