достаточно ли скорости вставки 5000 в секунду для MongoDB? - PullRequest
0 голосов
/ 05 января 2012

Мой документ выглядит так -

{   "_id" : ObjectId("4f0565b8440b4b19d407ea29"),   "type" : "web",  
    "when" : ISODate("2012-01-05T08:56:24.134Z"),   "user" : "IIUEBSTJ",  
    "res" : false
}

Как видите, это довольно простой и небольшой документ._id автоматически индексируется MongoDB.Я генерирую эти документы с помощью драйвера C # MongoDB.MongoDB экземпляр версии 2 работает на Ubuntu Box с 512 МБ ОЗУ и 2-х ядерным процессором.Поскольку я использую SDD, я не вижу заметных изменений в скорости вставки при возникновении ошибок.Вот код для создания этих документов -

MongoDatabase db = server.GetDatabase("logs");
MongoCollection coll = db.GetCollection("logs");
long ctr = 0;
for (; ; )
{
    Console.WriteLine("Doc# {0}", ctr++); 
    BsonDocument log = new BsonDocument();
    log["type"] = "auth";
    BsonDateTime time = new BsonDateTime(DateTime.Now);
    log["when"] = time;
    log["user"] = RandomString(8); 
    BsonBoolean bol = BsonBoolean.False;
    log["res"] = bol;
    coll.Insert(log);
}

В настоящее время я получаю около 5 тыс. Вставок в секунду.Это достаточно хорошо?«Хорошо», я хочу знать, это скорость, которую вы вводите, скорость, которую вы видели?

1 Ответ

3 голосов
/ 05 января 2012

В качестве попытки ответить на этот вопрос конструктивно, я бы предложил сначала подумать (как предложили комментаторы), какое число вставок в секунду вам подходит. Это полностью зависит от вашего варианта использования, и можно надеяться, что вы можете ответить на него лучше, чем кто-либо здесь.

Если вы считаете, что вам следует добиться большей производительности, чем вам (а быстрый поиск в Google предполагает, что ответ - да ), попробуйте выяснить, где ваш текущий узкие места и сфокусировать ваше внимание там. Например:

  1. Все ли процессоры закреплены на 100% на вашем клиентском компьютере или на вашем сервере? Для клиента используйте диспетчер задач Windows или отличный Process Explorer от sysinternals. Для сервера используйте команду top . Это может означать, что вам просто нужно больше ресурсов процессора на этой машине.

  2. Один ЦП на клиенте или сервере закреплен на 100%, в то время как другие простаивают? Если это так, вы, вероятно, смотрите на однопоточный процесс, который может выиграть от многопоточности. Если он находится на сервере, то может помочь распределение рабочей нагрузки по нескольким клиентам.

  3. Использует ли какая-либо из ваших машин всю их память? Те же инструменты могут помочь диагностировать это.

  4. Насыщена ли какая-либо из ваших машин пропускной способностью сети? Те же инструменты для диагностики для Windows или что-то типа vnStat для Linux. В этом случае вам может потребоваться перейти на более быстрое сетевое оборудование (сетевые карты, коммутаторы, маршрутизаторы, улучшенный кабель и т. Д.).

Это не должно быть язвительным ответом - просто пытаться указать вам правильное направление для диагностики такого рода вещей.

...