Главная | Наши услуги | Портфолио | Контактная информация

Главная arrow Разработка сайта arrow Немного о базах данных

Немного о базах данных

Используйте хорошую базу данных. Какую выбрать? Единого рецепта нет. Все зависит от решаемой задачи. Если она достаточно простая и вам не требуется выполнять сложные SQL-запросы (например, вложенные), то наилучшим решением будет, пожалуй, база данных MySQL.
MySQL - один из самых простых серверов БД. Но даже в этой простой базе есть свои способы оптимизации для ускорения запросов. Например, не секрет, что INSERT - одна из самых длительных операций (вычисление физического адреса для вставки, вставка, решение проблемы фрагментации, изменение индексов и служебных таблиц). Хороший прием для ускорения работы скрипта, который вставляет данные в БД - замена операции INSERT операцией INSERT DELAYED (отложенная вставка). Обновление данных будет выполнено только тогда, когда это не приведет к замедлению работы сервера.
Другой пример: если внимательно почитать документацию MySQL, можно найти упоминание о таблицах, расположенных в памяти (HEAP tables). Очевидно, что операции с такими таблицами совершаются значительно быстрее. Heap-таблицы можно использовать для решения некоторых задач.
Существует большое количество параметров запуска сервера БД, оптимизирующих буферы сортировки, вычислений, количество детей и другие параметры. Как правило, вам заранее известно, что вы будете делать с базой, и для повышения быстродействия можно задать соответствующие параметры. Например, возьмем вполне реальную задачу: построение какого-нибудь каталога. Ясно, что это будет одна большая таблица с большим количеством индексов. Вы знаете, что будете использовать представления. Работа с этой таблицей будет заключаться в запросах по индексу без использования сортировки. Посмотрим, как можно настроить сервер БД на выполнение такой задачи (пример из MySQL 3.23.25):

    *join_buffer_size - буфер для создания представлений, по умолчанию равен 131072 байта;
    *key_buffer_size - буфер для работы с ключами и индексами. Размер по умолчанию - 1048540;
    *sort_buffer - буфер для сортировки. По умолчанию - 2097116 байт.
Скорее всего, при увеличении какого-то буфера, скорость выполнения связанной с ним задачи увеличится. Исходя из нашей задачи, мы увеличим буфер для работы с ключами (скорость выборки значений из таблицы увеличится), уменьшим буфер сортировки (уменьшится скорость сортировки) и буфер представлений (уменьшится скорость работы с представлениями).
Строка запуска демона MySQL будет выглядеть примерно так (конкретные значения зависят от количества памяти в системе):
shell>safe_mysqld -O key_buffer=8M -O sort_buffer=1M -O join_buffer=16K
Резюмируем. При использовании базы данных работу скрипта можно значительно ускорить правильной настройкой сервера БД. В руководстве базы данных MySQL есть специальный раздел, посвященный оптимизации. За более подробной информацией можно обратиться на сайты:
Разработчики MySQL - http://www.mysql.com
Разработчики PostgreSQL - http://www.PostgreSQL.org/
Оптимизация MySQL - http://www.mysql.cz/information/presentations/presentation-oscon2000-20000719/index.html и http://support.ultrahost.ru/mysql_opt.php
Большие объемы
Еще одна проблема больших сайтов - большой объем информации. Если не применять никаких ухищрений, то поддержка простого html-сайта в какой-то момент потребует слишком много времени.
Объектно-ориентированное программирование
О пользе объектно-ориентированного подхода я уже рассказывал . Повторю вкратце. Каждый, кто хоть раз пробовал создавать динамические сайты, знает, что во многом это - очень однообразная задача. Гостевая книга, конференция, форма для отправления комментариев, подписка, регистрация. Как правило, эти скрипты слабо интегрированы и, в лучшем случае, используют общую библиотеку с константами и общими процедурами.
Однако если перечислить сущности, с которыми имеют дело вышеперечисленные скрипты, мы получим очень интересные результаты:
Сущность "пользователь". Имеет свое имя, фамилию, ник, пароль, электронный адрес… Используется практически во всех скриптах в разных ипостасях.
Сущность "сообщение". Вы можете возразить, что сообщения везде разные. Ничего подобного! Различаются формы представления сообщений, а данные, структура полей и методы обработки - одни. Автор, заголовок, тело - и так во всех проектах.
Вот фактически и все сущности, с которыми оперирует большинство скриптов на сайте. Гостевая книга (она, кстати, сама может быть объектом в более сложных проектах) представляет собой цепочку объектов класса "сообщение". Форум или конференция - те же сообщения, организованные иерархически. Отправка письма владельцу сайта - сообщение. Рассылка анонсов - перебор объектов класса "пользователь" и отправка каждому объекта класса "сообщение".
Было бы эффективно описать все эти объекты в одном месте, а потом строить из них, как из кирпичиков, программы и скрипты, просто вставляя вызовы объектов в код. К тому же, единое пространство сообщений, пользователей и других объектов значительно расширяет поле для творчества.
В этом и есть сущность объектного подхода. Вы создаете множество объектов - кирпичиков будущих программ - и из них строите свои сайты. Кроме того, вы можете использовать такие мощные методы ООП как наследование и полиформизм, без которых уже немыслимо построение крупных проектов.