вторник, 1 апреля 2008 г.

Проблемы при тестировании MySQL BLOBs

Данным постом хочу лишь указать тестеровщикам на некоторые тонкие моменты при тестировании приложений под MySQL DB.

Недавно руководство нашей компании решило мигрироваться на другую базу данных. Для это был выбран MySQL 5.0. Программисты подправили датасорсы, некоторые запросы, а так же скрипты для миграции данных. На это все ушло около 2-ух месяцев. Далее началось тестирование. Все шло вроде не плохо, пока не начали тестировать большие объемы данных - 50-100 и более мегабайт в одной записи, и все из-за того, что эти данные хранились в BLOB-ах.

И тут начали наступать на все лежащие грабли:

Грабля номер 1

Как оказалось, в MySQL реализовано несколько типов BLOB-ов: TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB. Разница между которыми, лишь в максимально допустимом размере значений, хранящихся в них. А что будет если наши данные выходят за пределы допустимых значений используемого blob-а?

Ответ прост, MySQL просто напросто обрезает лишнее никого об этом не предупреждая. Таким образом, в результате мы имеем поврежденные данные и никакого сообщения об ошибке.

Грабля номер 2

Как оказалось MySQL при обращении к записи таблицы, содержащей BLOB, загружает его полностью в память, даже если он не определен в списке выводимых полей. Для маленьких blob-ов это еще не страшно, а вот что будет при вызове записей с blob-ом 50-100 и больше мегабайт (или нагрузка на сервер будет приличная)?

В результате, получаем переполнение памяти (OutOfMemory) у нашего горячо любимого MySQL.


Вывод

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


В заключении хочу порекомендовать тестеровщикам приложений, написанных под MySQL, узнать у разработчиков или ДБ админов используются ли blob-ы и типы используемых blob-ов. И исходя из полученной информации написать тест кейсы (тестовые случаи), а именно:

  1. Запись данных в blob

  2. Чтение данных из blob

С использованием данных разного размера:

  1. меньше максимально допустимого размера блоба

  2. равный максимально допустимому размеру блоба

  3. больше максимально допустимого размера блоба

И плюс ко всему этому, рекомендую провести нагрузочное тестирование для проверки описанных случаев

Отправить комментарий

Условия копирования публикаций:

Все публикации в данном блоге являются частной собственностью авторов. Любое копирование информации допускается только при условии указания имени автора и активной ссылки на источник.