Суперсервер
В 1996 году в предшественнике Firebird, InterBase 4.1 появился многопоточный Суперсервер для новых тогда 32-битных платформ Windows. Он позволял лучше использовать новые возможности серверов и компьютерных сетей. Возможности Суперсервера исключить взаимоблокировку поточных процессов и динамически выделять кэш-память сделали его более удобным, чем Классический сервер, когда велико количество пользователей, выполняющих чтение/запись, а системные ресурсы ограничены.
С бурным ростом операционных систем GNU/Linux на базе Intel к концу 1990-x годов Суперсервер стал хорошим решением для некоторых платформ POSIX. Основная структура Суперсервера для Linux была реализована в InterBase бета-версии 6.0 с открытыми исходными кодами и затем была полностью реализована в Firebird 1.0. Архитектура Суперсервера стала доступной для платформ Sun Solaris.
Встраиваемый сервер
Firebird 1.5 представил встроенный вариант Суперсервера для платформ Windows. В этой модели Суперсервер компилируется вместе с встроенным клиентом, который напрямую подключается к базе данных. Одна динамическая библиотека (fbembed.dll) использует межпроцессное коммуникационное пространство Windows для передачи клиентских запросов и ответов сервера. Его API идентичен API обычного Суперсервера или Классического сервера. В коде приложения не требуется ничего специального для использования встраиваемого сервера.
Приложение, использующее встраиваемый сервер, может применять только локальный метод доступа (см. главу 2) и поддерживает один и только один клиентский процесс. Вы можете использовать столько встроенных приложений на одной машине, сколько вам нужно, однако одна база данных может в каждый момент времени быть открыта только одним таким приложением. Приложение встраиваемого сервера может выполняться на той же машине одновременно с обычным сервером Firebird. Тем не менее с базой данных не может быть одновременно соединен обычный сервер и встраиваемый сервер.
Встраиваемый сервер удовлетворяет самым низким требованиям масштабируемости сервера Firebird, давая возможность распространять одно высокопродуктивное приложение для одной базы данных с минимальными затратами. Поскольку к базе данных может иметь доступ и обычный сервер, выполняющий репликацию при неработающем встроенном приложении, встраиваемый сервер особенно подходит для "компактных" установок - например, на ноутбук или даже на флэш-диск.
Сравнение моделей Суперсервера и Классического сервера см. в главе 36. В той же главе в разд. "Работа со встроенным сервером" вы найдете полное описание работы со встроенным сервером под Windows.
Пример базы данных
Везде в этой книге языковые примеры используют пример базы данных, которая находится в каталоге Examples в папке, где установлен Firebird. В дистрибутиве Firebird 1.0.x она называлась employee.gdb. В Firebird 1.5 это employee.fdb.
Краткое описание примера базы данных содержится в приложении 6.
Соглашения по документации
Основной текст книги представлен этим шрифтом.
Тексты, набранные данным шрифтом, являются кодом, скриптами или примерами командной строки.
! ! !
ПРИМЕЧАНИЕ. Фрагменты текста, выделенные как этот, - используются для того, чтобы привлечь ваше внимание к важным моментам, которые могут повлиять на ваше решение по использованию обсуждаемой возможности Firebird.
. ! .
! ! !
СОВЕТ. Фрагменты, выделенные как этот, содержат советы, блестящие идеи или рекомендации.
. ! .
! ! !
ВНИМАНИЕ! Обратите особое внимание на такой фрагмент.
. ! .
От изготовителя fb2.
I. К сожалению, выполнить вышеприведенные соглашения, в полном объеме, при изготовлении, варианта книги в формате fb2, не удалось.
II. Давайте, протестируем вашу читалку.
E=mc
Если предыдущую строку вы видите в таком виде:
E=mc2
Значит, ваша читалка не поддерживает надстрочные символы (к сожалению, [пока] это бывает очень часто).
Для такого случая, в данном файле, я применяю следующие соглашения:
Пример надстрочных символов:
Теорема Ферма x(^n^) + y(^n^) = z(^n^)
Согласен, непривычно, неудобно, некрасиво…, но я выбрал такое оформление для удобства "везунчиков".
Т.е. если ваша читалка показывает все правильно, легким движением вы превратите книгу в удобНОваримую.
Порядок действий (алгоритм):
1. Распаковать данный файл(если это архив).
2. Открыть файл подходящим текстовым редактором (не сочтите за рекламу, я пользуюсь Notepad++)
3. Произведите 2 операции замены
"(^" на "<sup>"
"^)" на "</sup>"
(как вы догадываетесь, в запросе надо будет нажать кнопку "Заменить все")
4. Сохраните файл, если хочется, сожмите в архив.
И будет вам счастье.
Ну, а нам, всем остальным, придется мучаться с тем, что есть…
III. Теперь, таблицы.
1 строка первого столбца | 2 строка первого столбца | 3 строка первого столбца |
1 строка второго столбца | 2 строка второго столбца | спорю, что не догадаетесь, какая это строка |
Если вместо симпатичной таблицы вы увидели такое:
1 строка первого столбца
2 строка первого столбца
3 строка первого столбца
1 строка второго столбца
2 строка второго столбца
...
Значит ваша читалка таблиц не видит, что очень жаль, т.к. в книге их 197.
Что делать?... Ну, я поступаю так. В Mozilla Firefox поставил плагин для чтения fb2, и все вышесказанные проблемы решены, конечно, возможны и другие варианты...
IV. Еще одно огорчение:
примеры кода в книге приведены без отступов. Т.е. примеры читаются очень плохо. Виноват в этом формат fb2, не отрабатываются отступы (или я чего-то не знаю :( ).
Вот и все.
Успехов w_cat.
Синтаксические шаблоны
Некоторые фрагменты кода представляют синтаксические шаблоны (syntax patterns), то есть модели кода, которые демонстрируют обязательные и необязательные элементы синтаксиса операторов SQL или команд командной строки.
Для синтаксических шаблонов применяются определенные соглашения по используемым символам. Для иллюстрации этих соглашений возьмем из главы 20 пример, показывающий синтаксический шаблон для оператора SQL SELECT:
SELECT
[FIRST (m) ] [SKIP (n) ] [[ALL] | DISTINCT]
<список-столбцов> [, [ими столбца] | выражение | константа ]
AS имя-алиаса
FROM <таблица-или-процедура-или-просмотр>
[{[INNER] | [{LEFT | RIGHT | FULL} [OUTER]] JOIN}]
<таблица -или-процедура -или-просмотр>
ON <условия-соединения> [{JOIN..}]
[WHERE <условия-поиска>]
[GROUP BY <список-группируемых столбцов>]
[HAVING <условие-поиска>]
[OTIION <выражение-выбора> [ALL] ]
[PLAN <выражение-плана>]
[ORDER BY <список-столбцов>]
[FOR UPDATE [OF столбец1 [, столбец2. .]] [WITH LOCK]]
Специальные символы
Элементы (ключевые слова, параметры), которые обязательны во всех случаях, появляются без каких-либо дополнительных пометок, они выделены таким шрифтом, как и весь код в книге. В предыдущем примере ключевые слова SELECT и FROM являются обязательными для каждого оператора SELECT.
Некоторые символы, которые никогда не появляются в операторах SQL или в командах командной строки, используются в синтаксических шаблонах для указания особых правил по их использованию. Это символы [],{}, |, <строка> и ... (многоточие). Они используются в шаблонах следующим образом.
Квадратные скобки [ ] указывают, что элемент(n) в скобках являются необязательными. Когда встречаются вложенные квадратные скобки, то вложенные или внешние элементы являются необязательными.
Фигурные скобки { } указывают, что элементы внутри скобок являются обязательными. Обычное использование фигурных скобок - это представление необязательного элемента (заключенного в квадратные скобки), означающее: "Если необязательный элемент используется, часть, заключенная в фигурные скобки, является обязательной". В предыдущем примере, если используется необязательная явная фраза
JOIN,
[{[INNER] | [{LEFT | RIGHT | FULL} [OUTER]] JOIN}]
то внешняя пара фигурных скобок указывает, что ключевое слово JOIN является обязательным. Внутренняя пара фигурных скобок означает, что если задано соединение OUTER, то оно должно быть определено как LEFT, RIGHT или FULL С необязательным использованием ключевого слова OUTER.
Символ вертикальной черты | используется для разделения взаимоисключающих элементов. В предыдущем примере LEFT, RIGHT и FULL являются взаимоисключающими, также внутреннее (INNER) и внешнее (OUTER) соединения являются взаимоисключающими.
Параметры задаются строкой, которая заключается в угловые скобки < >. Например, [WHERE <условия-поиска>] указывает, что одно или более условий поиска требуется в качестве параметров для необязательного предложения WHERE В синтаксисе оператора SELECT.
В некоторых случаях <строка> может быть сокращением для более сложной конструкции, которая в последующих строках синтаксического шаблона будет раскрываться уровень за уровнем для получения полной детализации. Например, вы можете увидеть приблизительно следующее выражение: