Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #70, ОКТЯБРЬ 2004 г.

Стендовые испытания БД

Никита Кислицин

Хакер, номер #070, стр. 070-130-3


Первый тест заключается в следующем. Создается таблица te, имеющая структуру

Create table te(id int not null primary key, val text);

Т.е. это набор строк произвольной длины с уникальным идентификатором. Тестироваться будет скорость, с которой разные БД выполняют insert-запрос в эту таблицу. В общем виде тестируемый php-код будет выглядеть следующим образом:

for($i=0; $i<10000; $i++) {

$md=md5($i);

*_query("insert into te values('$i', '$md')");

}

Следует заметить, что строка, помещаемая в поле Val, – это md5-хэш идентификатора. Мне это показалось довольно простым и естественным способом автоматического генерирования произвольной строки для известного идентификатора. Наверное, ты подумал, что это не лучший вариант, т.к. md5 – сложновычисляемая функция, и ее выполнение серьезно повлияет на результаты тестирования. Это не так – время вычисления md5 намного меньше времени, которое тратится на добавление записи в таблицу, поэтому результаты тестирования сомнений не вызывают. Зато вызывают кучу удивления. Посмотри первый график.

Что уж тут говорить, преимущество MySQL не вызывает никаких сомнений. PgSQL делает все более чем в 10 раз медленнее, а новичок SQLite вовсе в сотни. Причем с ростом количества вставляемых записей эта разница все увеличивается! Чем может быть обусловлено такое дикое преимущество MySQL перед конкурентами? Видимо, более простой и продуманной схемой представления таблиц БД. Что касается SQLite – тут все понятно, это лагает интерпретатор PHP, который компилирует текстовые по своей природе данные в бинарные, причем делает это очень долго.

Наверное, так и должно быть – за любое удобство надо расплачиваться. То, что Постгрес в 10 раз медленнее вставляет информацию в таблицы, для меня стало настоящим откровением. Я не большой знаток архитектур БД, но против такого преимущества не попрешь. Хотя напрашивается и другой вывод. Разумно предположить, что Постгрес разрабатывали вменяемые люди, и усложнение структуры БД не было только лишь глупой прихотью. По-видимому, это сделано сознательно, чтобы ускорить работу сервера по выборке информации. Удалось ли разработчикам добиться желаемого результата, мы скоро увидим. А сейчас давай посмотрим, как быстро данные удаляются, насколько эффективно выполняются delete-запросы (см. график 2).

Мда. Усложненная структура таблиц pgSQL опять дает о себе знать. При удалении данных MySQL выполняет запросы в 20 (!) раз эффективнее ближайшего конкурента. Комментарии тут излишни, все по-прежнему объясняется усложненной структурой БД. Но даст ли это хоть какое-то преимущество? Ответ на этот животрепещущий вопрос даст третий тест.

Выбираем данные

Сейчас я составлю простенький скрипт, который будет сортировать данные по значению val и выплевывать в стандартный поток вывода 10 записей с самыми большими строками – для сравнения тут применяется символьная логика. Тестироваться будет скорость выполнения следующего запроса:

Назад на стр. 070-130-2  Содержание  Вперед на стр. 070-130-4