суббота, 8 октября 2011 г.

Mongo vs MsSql часть четвертая - select

Здравствуй дорогой читатель! Продолжаю серию экспериментов по сравнению производительности Mongo DB и MSSQL Server. На этот раз я решил сравнить производительность операций выборки, так как это, пожалуй, основная операция при взаимодействии с БД в большинстве приложений. На этот раз постараюсь провести несколько экспериментов в одной статье, по-этому будет минимум текста.

Выборка по ключу

В первом тесте я буду выбирать информацию из БД по первичному ключу. Для подготовки тестовых данных я воспользовался наработками предыдущего эксперимента по добавлению разнородных объектов. Выборки осуществляются по случайно сгенерированному ключу в цикле по десять тысяч итераций из наборов записей в количествах 1000, 10000, 50000, 100000 и 500000. Исходники этого теста на Гитхабе.

Как видно, на операциях выборки данных по первичному ключу обе СУБД показали примерно одинаковые результаты, причем скорость выборки практически не зависит от количества записей в базе.

Выборка набора записей

Во второй части я буду выбирать данные не по одной штуке, а по 10, 100 и 500, но тоже по первичному ключу. Прямая ссылка на исходники эксперимента.

Увы, в выборке больше одной записи Mongo не особо силен. Если на достаточно маленьком количестве записей в выборке, Mongo практически не уступает MSSQL, то уже на 100 записях выборки разница в быстродействии отличается в пять раз. И чем больше выборка, тем этот разрыв в производительности увеличивается.

Выборка по like

Последний, на этот раз, эксперимент - поиск по like. Искать буду по начальным четырем символам Guid, которыми заполняется поле Field1. Индекс по этому полю не строился. Исходники этого эксперимента.

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

Сегодняшние эксперименты показали преимущество MSSQL Server в выборке набора записей. Тем не менее, Mongo DB вполне может заменить MSSQL Server, если требуется выбирать небольшое количество записей.

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

Вадим комментирует...

Всех интересуют inner join, индексы...

А SQL compaq? Или обычный?

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

До джойнов ещё доберусь, а индексы в этом посте (по первичному проставлен и в MSSQL и в Mongo). Или ты что-то другое имел в виду?

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

предпоследний график неинформативен, все в кучу.

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

Не очень полезное сравнение.

Сколько памяти выделено МсСкулу, сколько памяти выделено Монго? Какие настройки буферизации и кеширования у каждой СУБД? Нужно указать все эти детали.

А если ты ничего не настраивал больше, то неинформативно сравнивать разные системы с настройками по умолчанию.