суперэффективные мускулы TONY (PORCO@ARGENTINA.COM) Спецвыпуск: Хакер, номер #063, стр. 063-060-3 Пришедшие данные необходимо сохранить во временной таблице, для которой используется движок Memory. Пропускная способность характеризуется в этом случае не медленной дисковой подсистемой, а подсистемой памяти, которая быстрее на два порядка. Далее в приеме и обработке данных наступает пауза, которую твоя СУБД может использовать для перекачки данных из временных таблиц в памяти в таблицы MyISAM или даже InnoDB. Код, выполняющий эти операции, работает в два потока: 1) основной поток получения данных от клиента; 2) поток перекачки данных из временных таблиц в таблицы на диске. На обычной рабочей станции цифры, которые описывают разницу в скорости сохранения данных, выглядят следующим образом. Вставка трех мегабайт данных в шесть блобов, хранящихся в одной строке таблицы, занимает: для движка InnoDB (с поддержкой транзакций) приблизительно 500 мс, для движка MyISAM — 100 мс, с помощью запроса INSERT DELAYED — 50 мс и, наконец, при вставке в таблицу движка Memory — менее одной миллисекунды. работа с блобами BLOB (binary large object) применяется в том случае, если необходимо сохранить массивы двоичных данных. В некоторых случаях, таких как при использовании интернет-сервера, лучше отказаться от использования блобов в пользу хранения ссылок на дисковые файлы с картинками твоего сайта. Однако при реализации серьезного хранилища данных без них не обойдешься. Быстрее всего загрузка данных в блоб осуществляется следующим образом. В первую очередь необходимо сохранить данные в файл на диске. Если ты работаешь на языке C++, то лучше всего воспользоваться итераторами буферизованного ввода-вывода. Далее в SQL-запросе, вставляющем данные в твою таблицу, укажи в качестве значения поля директиву LOAD_FILE(). Для таблицы изображенной на рис. «Редактор таблиц» SQL-запрос выглядит так: REPLACE DELAYED INTO stub VALUES('tempname', LOAD_FILE('/var/stub/bin.blob')). Пользователь, от имени которого выполняется этот запрос, должен обладать привилегией FILE. Кроме того, СУБД должна быть настроена на работу с локальными файлами — смотри на рис. «Настройки безопасности». безопасность Для увеличения скорости можно пожертвовать безопасностью базы данных. Дело в том, что при выполнении запроса проверяется возможность текущего пользователя работать с указанной таблицей и колонкой. Таким образом, если у таблицы и ее колонок нет ограничений на доступ, сервер MySQL'а не тратит время на проверку содержимого таблиц безопасности. То же самое касается ограничений на доступ пользователей к ресурсам — рис. «Ограничения ресурсов». |