Overview
En esta guía, puede aprender a configurar operaciones de lectura y escritura en PyMongo.
Configuración de lectura y escritura
Puede controlar cómo el controlador enruta las operaciones de lectura configurando una preferencia de lectura. También puede controlar cómo el controlador espera la confirmación de las operaciones de lectura y escritura en un conjunto de réplicas configurando una preocupación de lectura y una preocupación de escritura.
De forma predeterminada, las bases de datos heredan estas configuraciones de la MongoClient Las instancias y colecciones las heredan de la base de datos. Sin embargo, puede cambiar esta configuración en su base de datos o colección mediante uno de los siguientes métodos:
get_database():Obtiene la base de datos y aplica la preferencia de lectura, la preocupación de lectura y la preferencia de escritura del cliente.database.with_options():Obtiene la base de datos y aplica su preferencia de lectura actual, preocupación de lectura y preferencia de escritura.get_collection():Obtiene la colección y aplica su preferencia de lectura actual, preocupación de lectura y preferencia de escritura.collection.with_options():Obtiene la colección y aplica la preferencia de lectura, la preocupación de lectura y la preferencia de escritura de la base de datos.
Para cambiar la configuración de lectura o escritura con los métodos anteriores, llame al método y pase el nombre de la colección o base de datos y la nueva preferencia de lectura, preocupación de lectura o preferencia de escritura.
El siguiente ejemplo muestra cómo cambiar la preferencia de lectura, la preocupación de lectura y la preferencia de escritura de una base de datos llamada test-database con el método get_database():
client.get_database("test-database", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
El siguiente ejemplo muestra cómo cambiar la configuración de lectura y guardado de una colección llamada test-collection con el método get_collection():
database.get_collection("test-collection", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
El siguiente ejemplo muestra cómo cambiar la configuración de lectura y guardado de una colección llamada test-collection con el método with_options():
collection.with_options(read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
Tip
Para ver los tipos de preferencias de lectura disponibles en la enumeración ReadPreference, consulte la
Documentación de la API.
Para obtener más información sobre la configuración de lectura y escritura, consulte las siguientes guías en el manual de MongoDB Server:
Conjuntos de etiquetas
En MongoDB Server, puede aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según el criterio que elija. Después, puede usar esas etiquetas para seleccionar uno o más miembros para una operación de lectura.
De forma predeterminada, PyMongo ignora las etiquetas al elegir un miembro para leer. Para indicarle a PyMongo que prefiera ciertas etiquetas, páselas como parámetro al constructor de la clase de preferencia de lectura.
En el siguiente ejemplo de código, el conjunto de etiquetas pasado al parámetro read_preference le indica a PyMongo que prefiera las lecturas del centro de datos de Nueva York ('dc': 'ny') y recurra al centro de datos de San Francisco ('dc': 'sf'):
db = client.get_database( 'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))
Umbral local
Si varios miembros del conjunto de réplicas coinciden con la preferencia de lectura y los conjuntos de etiquetas que especifique, PyMongo lee desde los miembros del conjunto de réplicas más cercanos, elegidos de acuerdo con su tiempo de ping.
De forma predeterminada, el controlador utiliza solo los miembros cuyos tiempos de ping están a menos de 15 milisegundos del miembro más cercano para las consultas. Para distribuir las lecturas entre los miembros con latencias más altas, pase la opción localThresholdMS al constructor MongoClient().
El siguiente ejemplo especifica un umbral local de 35 milisegundos. Seleccione el Synchronous o pestaña Asynchronous para ver el código correspondiente:
client = MongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
client = AsyncMongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
En el ejemplo anterior, PyMongo distribuye las lecturas entre los nodos coincidentes dentro de 35 milisegundos del tiempo de ping del nodo más cercano.
Nota
PyMongo ignora el valor localThresholdMS al comunicarse con un conjunto de réplicas a través de una mongos instancia. En este caso, use la opción de línea de comandos localThreshold.
Lecturas y escrituras reintentables
PyMongo vuelve a intentar automáticamente ciertas operaciones de lectura y escritura una sola vez si fallan debido a un error de red o servidor.
Puede deshabilitar explícitamente las lecturas o escrituras reintentables configurando la opción retryReads o retryWrites en False en el constructor MongoClient(). El siguiente ejemplo deshabilita las lecturas y escrituras reintentables para un cliente. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:
client = MongoClient("<connection string>", retryReads=False, retryWrites=False)
client = AsyncMongoClient("<connection string>", retryReads=False, retryWrites=False)
Para obtener más información sobre las operaciones de lectura reintentable compatibles, consulte "Lecturas reintentables" en el manual de MongoDB Server. Para obtener más información sobre las operaciones de escritura reintentable compatibles, consulte "Escrituras reintentables" en el manual de MongoDB Server.
Intercalación
Cuando crea una colección, puede especificar una intercalación predeterminada para todas las operaciones que realice en la colección.
Una intercalación es un conjunto de reglas específicas del lenguaje para la comparación de strings, como el uso de mayúsculas y minúsculas y las marcas de acento.
Para especificar una intercalación, crear una instancia de la clase Collation o un diccionario de Python. Para una lista de opciones que pueda pasar al constructor Collation o incluir como claves en el diccionario, consultar Intercalación en el manual de MongoDB Server.
Tip
Intercalación de importación
Para crear una instancia de la clase Collation, se debe importar desde pymongo.collation.
El siguiente ejemplo crea la misma colección que el ejemplo anterior, pero con una intercalación predeterminada de fr_CA. Seleccione la pestaña Synchronous o Asynchronous para ver el código correspondiente:
from pymongo.collation import Collation database = client["test_database"] database.create_collection("example_collection", collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation database = client["test_database"] await database.create_collection("example_collection", collation=Collation(locale='fr_CA'))