|
В некоторых системах с установленным NFS, а также в Linux, есть проблемы с
механизмом блокировки файлов. Результатом может быть замораживание потоков.
Команда mysqladmin processlist поможет выявить эту проблему. Если в поле
«Command» против замороженных потоков стоит «System lock», запустите mysqld с
параметром --skip_ locking.
Глава №5.
mSQL
Концепции баз данных и их проектирование имеют очень важное значение, но вы,
вероятно, хотите приступить к непосредственной работе с MySQL или mSQL. He
исключено, что вы уже выбрали ту или иную СУБД соответственно своим
потребностям. Возможно, однако, вы надеетесь, что эта книга поможет вам принять
такое решение. В этой главе мы подробно разберем mSQL. Если вы уже стали
приверженцем MySQL, то эту главу можно пропустить. Напротив, если вас
привлекает mSQL или вы хотите больше узнать о внутренних механизмах обеих баз
данных, следует начать с этой главы.
mSQL является реляционной системой управления базами данных (РСУБД), открывшей
эру дешевых баз данных малого и среднего масштаба с поддержкой SQL. Малые
размеры, впечатляющая производительность и простота изучения сделали ее
предпочтительным выбором растущего числа разработчиков программ для Интернет,
которым не достает времени, чтобы стать экспертами в области программирования
баз данных. Автор mSQL намеренно стремился к достижению этих целей, приступая к
созданию программного продукта, способного заполнить зияющий пробел в ряду
РСУБД.
Архитектура
Дэвид Хьюз преследовал три цели, создавая mSQL:
* mSQL должна быть быстрой.
* mSQL должна быть компактной.
* mSQL должна обеспечивать множественность одновременных подключений.
Высокая скорость была главной целью mSQL. Поскольку в большинстве коммерческих
SQL-серверов разработчики стараются реализовать полную спецификацию SQL2, а
кроме того, и собственные расширения языка, им приходится расплачиваться
производительностью и размерами. MSQL, напротив, жертвует некоторыми наиболее
изощренными возможностями коммерческих серверов в пользу скорости. Для проекта
Minerva требовалась возможность быстрого выполнения большого числа простых
SQL-запросов. Именно это позволяет делать mSQL.
Скорость и размеры идут рука об руку. Как обнаружил Хьюз, если начать с самого
основания и реализовать лишь самые необходимые функции, можно разработать
SQL-сервер, который будет требовать столь мало ресурсов, что для его успешного
использования не потребуется отдельной машины. В результате, mSQL обладает
значительной частью функциональности основных РСУБД, требуя значительно меньших
ресурсов.
Скорости и размера, достигнутых в mSQL, было бы достаточно для того, чтобы
успешно заменить Postgres в проекте Minerva. Хьюз, однако, хотел изменить и ту
модель поведения, которая, собственно, заставила его искать альтернативу. Хьюз
спроектировал mSQL так, чтобы та могла обрабатывать множественные одновременные
подключения в рамках одного процесса. В результате получается маленький,
быстрый, эффективный SQL-сервер, способный одновременно обрабатывать несколько
запросов - локально или по сети.
Для реализации своих проектных целей Хьюзу пришлось ограничить функциональность
сервера. Диалект SQL, поддерживаемый mSQL, является подмножеством стандарта
ANSI SQL2, содержащим наиболее употребительные команды, такие как CREATE,
INSERT, SELECT, UPDATE и DELETE. Хьюз отказался от ресурсоемких операций, вроде
поддержки транзакций. В том типе приложений, которые используют mSQL,
функциональность, опущенная Хьюзом, обычно не требуется.
mSQL является однопоточным сервером с очередью. Одновременно к серверу может
подключиться любое число клиентов - до определенного предела. При отправке
клиентом запроса к серверу mSQL ставит запрос в синхронную очередь и
обрабатывает все запросы последовательно по одному. Эффективность такого
решения зависит, таким образом, от способности сервера быстро обработать каждый
запрос. Если запросы вовремя не обрабатывать, очередь будет расти, что в итоге
приведет к краху сервера из-за превышения системных ограничений. Поэтому
скорость является решающим фактором для успешной работы mSQL. На рис. 5-1
показана работа очереди mSQL и однопоточная работа.
Однопоточная сущность mSQL устраняет необходимость в пакетной обработке.
Поскольку запросы выполняются поочередно, они не способны помешать один другому.
Конечно, было бы неплохо, если бы mSQL поддерживала транзакции, но в них нет
необходимости для нормальной работы ядра базы данных при тех целях, которые
ставились перед mSQL.
mSQL поддерживает два типа соединений со стороны клиента. Удаленные клиенты
подключаются к серверу через известный порт TCP/IP. Используя TCP/IP, база
данных mSQL может предоставлять доступ любому компьютеру в мире через Интернет.
Локальные соединения тоже могут производиться через TCP/IP, но лучшей
производительности можно добиться, используя стандартный сокет Unix, что
эффективнее примерно на 20%.
Рис. 5-1. Архитектура клиент,/сервер в mSQL
С mSQL связан набор программ, позволяющих осуществлять полный доступ к базе
данных. Монитор msql позволяет пользователю непосредственно направлять запросы
серверу. Хотя во время разработки этот инструмент полезен, большинству
пользователей необходим какой-либо интерфейс для доступа к базе данных
|
|