В этой части серии экспериментов по сравнению Mongo DB и MS SQL Server я буду всячески
мучать этих, не самых последних, представителей двух различных классов СУБД - NoSql
и реляционных соответственно, вставками данных.
Итак мы имеем MS SQL Server 2008R2 редакции develop и Mongo DB 2.0. Если кто хочет
воспроизвести эксперимент у себя - Вам понадобятся соответствующие дистрибутивы,
вместо develop редакции сиквела вполне сгодится бесплатный
express,
Mongo можно загрузить отсюда.
Исходники программки можно найти на GitHub по
этой ссылке,
для компиляции понадобится dbullet, кто не использует git -
качайте отдельно, для всех остальных:
Тестирование проходило на следующий машине с такой конфигурацией: Windows 7 64, Core2Duo E4500, 8GB RAM
$
git submodule init$
git submodule update
Опыт первый
Вставка большого количества мелких объектов
Для проведения измерений был создан такой простой интерфейс, который будет дополняться с каждым новым тестом:
public interface IBenchmark
{
void InsertSimpleSmallObject(SimpleSmallObject obj);
}
{
void InsertSimpleSmallObject(SimpleSmallObject obj);
}
Реализация для MsSql:
void InsertSimpleSmallObject(SimpleSmallObject
obj)
{
command.Parameters[0].Value = obj.Value;
command.Parameters[1].Value = obj.Id;
command.ExecuteNonQuery();
}
{
command.Parameters[0].Value = obj.Value;
command.Parameters[1].Value = obj.Id;
command.ExecuteNonQuery();
}
Реализация для Mongo:
void InsertSimpleSmallObject(SimpleSmallObject
obj)
{
collection.Save(typeof(SimpleSmallObject), obj);
}
{
collection.Save(typeof(SimpleSmallObject), obj);
}
Кроме того будет запуск пустой реализации метода InsertSimpleSmallObject, чтобы оценить время потраченное на создание и удаление объектов. Перед каждым запуском прогоняется сборщик мусора, а инициализация подключений к базам выполняется до начала измерений. Объекты вставляются в цикле по одной штуке. Вставлять буду объекты такой структуры:
public class SimpleSmallObject
{
public int Id { get; set; }
public string Value { get; set; }
}
{
public int Id { get; set; }
public string Value { get; set; }
}
В качестве Value используется Guid.
На этом этапе я посчитал, что нужно присвоить сиквелу техническое поражение, но тем не менее хотелось хоть немного поднапрячь Mongo. Итак увеличиваем количество вставок до милиона.
По результатам итих тестов стало абсолютно понятно, что Mongo не оставляет ни каких шансов на победу сиквелу в плане вставки маленьких записей.
И уже сейчас можно смело говорить, что, как минимум, Mongo можно использовать там где такие операции востребованы.
Я считаю что Mongo замечательно подойдет для всякого рода журналирования и логирования.
Хотел в этой статье посравнивать и по другим видам инсертов, но статья и так получилась большой, так что постараюсь продолжить в следующий раз
2 комментария:
Условия тестов изначально не оставляли SQL Server никаких шансов :)
Условия я старался подобрать одинаковые. Но если ты про вставку говоришь, то посмотрим дальше, сможет ли скул отыграться на выборках, удаления и джойнах.
Отправить комментарий