De la documentación C#:MongoDB C# collection.Save vs Insert + Actualización
El método Save es una combinación de inserción y actualización. Si el miembro Id del documento tiene un valor, se supone que es un documento existente y Guardar actualización de llamadas en el documento (estableciendo el indicador Upsert justo en caso de que en realidad sea un documento nuevo después de todo).
Estoy creando mis ID manualmente en una clase base de la que todos mis objetos de dominio heredan. Entonces, todos mis objetos de dominio tienen una ID cuando se insertan en MongoDB.
Las preguntas son, ¿debería usar la colección.Guardar y mantener mi interfaz simple o esto realmente da como resultado una sobrecarga en el Save-call (con el indicador Upsert), y en ese caso debo usar la colección.Insertar y actualizar en su lugar?
Lo que estoy pensando es que el método Save primero llama a Update y luego se da cuenta de que mi nuevo objeto no existía en primer lugar, y luego llama a Insert. ¿Me equivoco? ¿Alguien ha probado esto?
Nota: Inserto datos a granel con InsertBatch, por lo que las grandes copias de datos no importan en este caso.
Editar, Seguimiento
escribí una pequeña prueba para averiguar si llama con la bandera de actualización de Upsert tenía cierta sobrecarga de modo Insertar podría ser mejor. Resultó que corren a la misma velocidad. Vea mi código de prueba a continuación. MongoDbServer e IMongoDbServer es mi propia interfaz genérica para aislar la instalación de almacenamiento.
IMongoDbServer server = new MongoDbServer();
Stopwatch sw = new Stopwatch();
long d1 = 0;
long d2 = 0;
for (int w = 0; w <= 100; w++)
{
sw.Restart();
for (int i = 0; i <= 10000; i++)
{
ProductionArea area = new ProductionArea();
server.Save(area);
}
sw.Stop();
d1 += sw.ElapsedMilliseconds;
sw.Restart();
for (int i = 0; i <= 10000; i++)
{
ProductionArea area = new ProductionArea();
server.Insert(area);
}
sw.Stop();
d2 += sw.ElapsedMilliseconds;
}
long a1 = d1/100;
long a2 = d2/100;