MongoDB C # collection.Save vs Insert + Update

Из документации C #:

Метод Save представляет собой комбинацию Insert и Update. Если член Id документа имеет значение, то предполагается, что это существующий документ, и функция Save вызывает обновление документа (установка флага Upsert на тот случай, если это действительно новый документ).

Я вручную создаю свои идентификаторы в базовом классе, от которого наследуются все объекты моего домена. Таким образом, все мои объекты домена имеют идентификатор, когда они вставляются в MongoDB.

Вопрос в том, следует ли мне использовать collection.Save и сохранять простой интерфейс, или это действительно приводит к некоторым накладным расходам при вызове Save (с флагом Upsert), и следует ли мне использовать вместо этого collection.Insert и Update?

Я думаю, что метод Save сначала вызывает Update, а затем выясняет, что мой новый объект изначально не существует, а затем вместо этого вызывает Insert. Я ошибся? Кто-нибудь тестировал это?

Примечание: я вставляю массовые данные с помощью InsertBatch, поэтому большие блоки данных в этом случае не имеют значения.

Edit, Follow up

Я написал небольшой тест, чтобы выяснить, вызывает ли вызов Update с флагом Upsert некоторые накладные расходы, поэтому Insert может быть лучше. Оказалось, что они бегут с одинаковой скоростью. Смотрите мой тестовый код ниже. MongoDbServer и IMongoDbServer - это мой собственный общий интерфейс для изоляции хранилища.

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;
6
задан Paw Baltzersen 22 November 2011 в 08:05
поделиться