Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

APIs asíncronas y síncronas

En esta guía, puedes aprender sobre el del controlador de Rust asíncronas y síncronas APIs. Esta guía explica cómo habilitar las API disponibles y estructurar tu código para usar cada una de ellas.

El driver Rust admite tokio y async-std, dos cajas de tiempo de ejecución asíncronos populares. Por defecto, el driver utiliza el entorno asíncrono tokio, pero puedes seleccionar un entorno específico añadiendo flags de funcionalidad a la dependencia mongodb en tu archivo Cargo.toml.

El driver también incluye una API síncrona para casos de uso que requieren bloqueo o cuando el paralelismo no es necesario. Puedes seleccionar la API síncrona añadiendo banderas de funcionalidad a la dependencia mongodb en tu archivo Cargo.toml.

El driver utiliza por defecto el tiempo de ejecución tokio. Puedes elegir explícitamente un tiempo de ejecución añadiendo los indicadores de funcionalidad "tokio-runtime" o "async-std-runtime" a la dependencia mongodb.

Selecciona entre las siguientes pestañas para ver cómo agregar flags de funcionalidades para cada caja correspondiente:

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

Para obtener más información sobre la instalación del driver y la adición de indicadores de funcionalidad, consulte la Paso de descargar e instalación de la guía de inicio rápido.

El siguiente código utiliza el módulo task de la caja tokio para crear tareas independientes y concurrentes para múltiples operaciones de datos:

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
});
}

El controlador también proporciona una API síncrona y bloqueante. Para usar la API síncrona, añade ya sea el indicador de funcionalidad "sync" o "tokio-sync" a la dependencia mongodb.

Selecciona entre las siguientes pestañas para ver cómo agregar flags de funcionalidades para cada caja correspondiente:

[dependencies.mongodb]
version = "2.8.2"
default-features = false
features = ["sync"]
[dependencies.mongodb]
version = "2.8.2"
default-features = false
features = ["tokio-sync"]

Al utilizar la API síncrona, use los tipos del módulo mongodb::sync para ejecutar operaciones. El siguiente código utiliza el módulo sync para insertar datos en una colección mediante la API síncrona. Cuando el método insert_one se ejecuta dentro del bucle for, el controlador espera a que cada solicitud se complete antes de continuar.

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);
}
}

Puede usar tanto APIs asincrónicas como sincrónicas en la misma aplicación. Por ejemplo, para habilitar ambos entornos de ejecución tokio, puede agregar la dependencia tokio a su lista de dependencias y agregar la bandera "tokio-sync" a la dependencia mongodb:

[dependencies]
futures = "0.3.28"
tokio = {version = "1.32.0", features = ["full"]}
[dependencies.mongodb]
version = "2.8.2"
features = ["tokio-sync"]

Para obtener más información sobre los conceptos de esta guía, consulta las siguientes páginas:

Para obtener más información sobre los métodos y tipos mencionados en esta guía, vea la siguiente documentación de la API:

Volver

Consideraciones sobre el rendimiento

En esta página