четверг, 6 октября 2011 г.

Mongo vs MsSql часть вторая - insert


В этой части серии экспериментов по сравнению Mongo DB и MS SQL Server я буду всячески мучать этих, не самых последних, представителей двух различных классов СУБД - NoSql и реляционных соответственно, вставками данных.
Итак мы имеем MS SQL Server 2008R2 редакции develop и Mongo DB 2.0. Если кто хочет воспроизвести эксперимент у себя - Вам понадобятся соответствующие дистрибутивы, вместо develop редакции сиквела вполне сгодится бесплатный express, Mongo можно загрузить отсюда. Исходники программки можно найти на GitHub по этой ссылке, для компиляции понадобится dbullet, кто не использует git - качайте отдельно, для всех остальных:
$
git submodule init
$
git submodule update
Тестирование проходило на следующий машине с такой конфигурацией: Windows 7 64, Core2Duo E4500, 8GB RAM

Опыт первый

Вставка большого количества мелких объектов

Для проведения измерений был создан такой простой интерфейс, который будет дополняться с каждым новым тестом:

public interface IBenchmark
{
  void InsertSimpleSmallObject(SimpleSmallObject obj);
}

Реализация для MsSql:

void InsertSimpleSmallObject(SimpleSmallObject obj)
{
  command.Parameters[0].Value = obj.Value;
  command.Parameters[1].Value = obj.Id;
  command.ExecuteNonQuery();
}

Реализация для Mongo:

void InsertSimpleSmallObject(SimpleSmallObject obj)
{
  collection.Save(typeof(SimpleSmallObject), obj);
}

Кроме того будет запуск пустой реализации метода InsertSimpleSmallObject, чтобы оценить время потраченное на создание и удаление объектов. Перед каждым запуском прогоняется сборщик мусора, а инициализация подключений к базам выполняется до начала измерений. Объекты вставляются в цикле по одной штуке. Вставлять буду объекты такой структуры:

public class SimpleSmallObject
{
  public int Id { get; set; }
  public string Value { get; set; }
}

В качестве Value используется Guid.

На этом этапе я посчитал, что нужно присвоить сиквелу техническое поражение, но тем не менее хотелось хоть немного поднапрячь Mongo. Итак увеличиваем количество вставок до милиона.

По результатам итих тестов стало абсолютно понятно, что Mongo не оставляет ни каких шансов на победу сиквелу в плане вставки маленьких записей. И уже сейчас можно смело говорить, что, как минимум, Mongo можно использовать там где такие операции востребованы. Я считаю что Mongo замечательно подойдет для всякого рода журналирования и логирования.

Хотел в этой статье посравнивать и по другим видам инсертов, но статья и так получилась большой, так что постараюсь продолжить в следующий раз

2 комментария:

Unknown комментирует...

Условия тестов изначально не оставляли SQL Server никаких шансов :)

Семён Кирюшин комментирует...

Условия я старался подобрать одинаковые. Но если ты про вставку говоришь, то посмотрим дальше, сможет ли скул отыграться на выборках, удаления и джойнах.