суббота, 4 сентября 2010 г.

MSSQL vs MongoDb vs MySql

Для одного из наших проектов потребовалась быстрая запись большого количества данных. Очень много мелких запросов.

В настоящий момент мы используем Microsoft SQL server 2008 и обращаемся к нему через LINQ.

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

Я тестировал вставку в базу по одной простой записи с GUID и датой. Все базы были на локальном компьютере без пароля. Вставка происходила последовательно в цикле. Перед вставкой каждой строки открывался новый коннект к базе.




Верхняя секция показывает чистую вставку используя стандартные коннекторы. Без всяких ORM.

Средняя - это хранимые процедуры. т.е. цикл выполнен внутри хранимой. (на мой взгляд это предельная скорость вставки для субд)

Нижняя секция - с использованием LINQ и Entity Framework

Выводы:

Microsoft SQL Server во всех тестах показал худший результат.

MongoDb невероятно быстр. Но у него отсутствует целостность базы, транзакции, хранимые и есть возможность потерять часть информации при перезагрузке.

MySql мне понравился больше всего. Он лишен вышеперечисленных недостаток MongoDb и обладает вполне приемлемой скоростью. Возможно, запись из несколько потоков может еще повысить скорость.


А вот как можно ускорить приложение, если не открывать подключение каждый раз:



Выводы:

Microsoft SQL Server быстрее в 8 раз, если сохранять подключение.

MongoDb вообще не тратит время на подключение, т.к. у него нету логинов и паролей. Но в этом есть и недостаток. Например надо передавать данные только через VPN внутри локальной сети датацентра. Не потому, что кто-то их может перехватить, а потому, что в пределах локалки можно подключиться на открытый порт без логина и пароля.

MySql быстрее в 3 раза, если сохранять подключение. Он опять же лишен недостатков MongoDb c коннектом.

Теперь вопрос - а зачем вообще юзать дорогой и тяжелый Microsoft SQL Server ???