MySQL & 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 позволяет пользователю непосредственно направлять запросы серверу. Хотя во время разработки этот инструмент полезен, большинству пользователей необходим какой-либо интерфейс для доступа к базе данных посредством какого-либо приложения. Для поддержки разработки приложений mSQL имеет встроенный API на языке С, позволяющий любой С-программе соединяться с сервером mSQL через TCP/IP или сокет Unix.

    mSQL поддерживает также сетевой протокол, позволяющий подключаться к серверу по сети, используя другие языки, без С API. С помощью этих двух интерфейсов разработчики, использующие множество языков, разработали библиотеки для подключения к mSQL почти из любого известного языка. В данной книге рассказывается об использовании API для С, Perl, Java и Python.




    Содержание раздела