sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:¿Se escriben operaciones masivas en el registro de operaciones como un todo?

Entraré en esto con la advertencia general de que admito que ni siquiera he mirado los resultados, pero los principios básicos me parecen válidos desde el principio.

Lo que debe tener en cuenta aquí es "lo que realmente está sucediendo bajo el capó" del "azúcar de sintaxis agradable" que se le presenta en las llamadas generales. Lo que esto significa es básicamente mirar lo que realmente hace el "formulario de comando" de las operaciones que está llamando. En este caso "update" .

Entonces, si ya vio ese enlace, considere lo siguiente "Bulk " formulario de actualización:

var bulk = db.collection.initializeOrdedBulkOp();

bulk.find({ "_id": 1 }).updateOne({ "$set": { "a": 1 } });
bulk.find({ "_id": 2 }).updateOne({ "$set": { "b": 2 } });

bulk.execute();

Ahora ya sabe que esto se envía al servidor como uno solicitud, pero lo que probablemente no esté considerando es que la "solicitud" real hecha "bajo el capó" es en realidad esto:

db.runCommand({
    "update": "collection",
    "updates": [
        { "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } },
        { "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }
    ],
    "ordered": true
})

Por lo tanto, es lógico que lo que realmente ve en los registros bajo la operación de "actualización" sea algo así como (abreviado de salida completa a solo la consulta):

{ "q": { "_id": 1 }, "u": { "$set": { "a": 1 } } }
{ "q": { "_id": 2 }, "u": { "$set": { "b": 2 } } }

Lo que, por lo tanto, significa que cada una de esas acciones con el comando asociado está en el registro de operación para "reproducir" en la replicación y/o en otras acciones que podría realizar, como "reproducir" específicamente las entradas del registro de operación.

Estaría seguro de que eso es lo que realmente sucede sin siquiera mirar, porque sé que así es como los controladores implementan las llamadas reales, y tiene sentido que cada llamada se mantenga dentro del registro de operaciones de esta manera.

Por lo tanto, "en su conjunto", entonces no. Estas no son "transacciones" y siempre son operaciones distintas, incluso si su envío y devolución están dentro de una sola solicitud. Pero ellos no una operación singular y, por lo tanto, no se registrará ni debe registrarse como tal.