Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:MUMPS СУБД. Практика применения и опыт программирования.pdf
X
- •Предисловие
- •Введение
- •Среда исполнения
- •Команды
- •Команды присваивания
- •Условные команды
- •Команды передачи управления
- •Команды ввода-вывода
- •Служебные команды
- •Постусловия
- •Операторы
- •Переменные
- •Числа и строки
- •Функции
- •$DATA
- •$GET
- •$ORDER
- •$NEXT
- •$QUERY
- •$NAME
- •$QLENGTH
- •$QSUBSCRIPT
- •$ASCII
- •$CHAR
- •$EXTRACT
- •$PIECE
- •$LENGTH
- •$REVERSE
- •$FIND
- •$TRANSLATE
- •$JUSTIFY
- •$FNUMBER
- •$TEXT
- •$RANDOM
- •$VIEW
- •$SELECT
- •$STACK
- •Списковые функции
- •Битовые функции
- •Модули
- •Рутины
- •Передача параметров
- •Неопределенные значения
- •Шаблоны
- •Косвенность
- •Косвенность имени
- •Косвенность индексов
- •Косвенность метки
- •Косвенность аргумента
- •Косвенность шаблона
- •Интерпретатор
- •Голая ссылка
- •Очередность выполнения
- •Очередность вычисления выражений
- •Очередность вычисления имен
- •Стекование $test
- •Комментарий
- •Стандарт и расширения
- •Глобалы
- •B-дерево
- •Кодирование индексов
- •Размер блока
- •Кеширование блоков
- •Структуры
- •Индексация
- •Группировка
- •Каноничность индексов
- •Маппинг
- •Индексация данных
- •Общие принципы
- •Механизм поддержки индекса
- •Простой индекс
- •Составной индекс
- •Покрывающий индекс
- •Кластерный индекс
- •Хеш-индекс
- •Битмап индекс (bitmap)
- •Битслайс индекс (bitslice)
- •Нормирование значений
- •Выборки по индексу
- •Многоиндексная выборка (zig-zag)
- •Дифференциальное индексирование
- •Индексация длинных атрибутов
- •Межтабличный индекс
- •Индекс с условием на вставку
- •Индекс на вычисляемый атрибут
- •Индекс поиска по фрагменту
- •Индексация для шаблона (like)
- •Индексация уникального атрибута
- •Массовое перестроение индексов
- •Операции с древовидными индексами
- •Операции с битовыми индексами
- •Сортировка по индексу
- •Статистики и кардинальность
- •Конкурентный доступ
- •Параллельность выполнения
- •Блокировки
- •Функция $INCREMENT
- •Транзакции
- •Блокировки в транзакциях
- •Функция $BIT
- •Дедлоки
- •Обработка ошибок
- •Состояние ошибки
- •ZTRAP
- •GT.M
- •MiniM
- •ETRAP
- •Определение
- •$ETRAP
- •$ECODE
- •$ESTACK
- •Ошибки в обработчике ошибок
- •$STACK()
- •Трассировка
- •BREAK
- •MiniM Debugger
- •Serenji Debugger
- •Внешний мир
- •Общие принципы
- •Терминальный интерфейс
- •Сокеты
- •HTTP клиент
- •Вебсервер на MUMPS
- •WebLink
- •Проблемы HTTP
- •Поверх HTTP
- •Подключаемые DLL (SO)
- •Файлы
- •Внешние процессы
- •Порты
- •Практика применения
- •Терминальный режим
- •Редакторы рутин
- •Экспорт и импорт
- •Препроцессор
- •Формат $HOROLOG
- •Опции устройств
- •$X и $Y
- •Возврат результатов
- •Возврат по значению ($$)
- •Возврат по ссылке
- •Запись в предопределенную переменную
- •Возврат значений косвенно
- •Итеративный возврат
- •Потоковый возврат
- •%Z - рутины
- •Планирование файлов
- •Память и сборка мусора

Е. Каратаев
MUMPS СУБД
Практика применения
и опыт программирования
СОЛОН-ПРЕСС
2021

УДК 621.396.218
ББК 32.884.1
К 215
Каратаев Е.
MUMPS СУБД. — М.: СОЛОН-ПРЕСС, 2021. — 550 с.
Книга описывает среду исполнения, принципы организации данных в
MUMPS системах и технически евопросы их применения. Описываются
языковые средства, принципы обработки ошибок, алгоритмика работы с индексами, принципы внешнего взаимодействия и многое другое.
Книга может быть полезна как квалифицированным разработчикам в виде справочника, так и изучающим компьютерные технологии.
Издание интересно преподавателям и студентам профильных специальностей вузов.
УДК 621.396.218
ББК 32.884.1
Сайт журнала «Ремонт & Сервис»: www.remserv.ru
Сайт издательства «СОЛОН-ПРЕСС»: www.solon-press.ru
КНИГА — ПОЧТОЙ
Книги издательства «СОЛОН-ПРЕСС» можно заказать наложенным платежом (оплата
при получении) по фиксированной цене. Заказ оформляется одним из трех способов:
1. Послать открытку или письмо по адресу: 123001, Москва, а/я 82.
2. Оформить заказ можно на сайте www.solon-press.ru в разделе «Книга — почтой».
3. Заказать по тел. (495) 617-39-64, (495) 617-39-65.
Каталог издательства высылается по почте бесплатно.
При оформлении заказа следует правильно и полностью указать адрес, по которому должны быть высланы книги, а также фамилию, имя и отчество получателя. Желательно указать
дополнительно свой телефон и адрес электронной почты.
Через Интернет вы можете в любое время получить свежий каталог издательства
«СОЛОН-ПРЕСС», считав его с адреса www.solon-press.ru/kat.doc.
Интернет-магазин размещен на сайте www.solon-press.ru.
По вопросам приобретения обращаться:
ООО «ПЛАНЕТА АЛЬЯНС»
Тел: (499) 782-38-89,
www.alians-kniga.ru
ISBN 978-5-91359-174-6 © Обложка «СОЛОН-ПРЕСС», 2021
© Каратаев Е., 2021

Оглавление
Предисловие 9
Введение 11
1 Среда исполнения 13
1.1 Команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1.1 Команды присваивания . . . . . . . . . . . . . . . . 18
1.1.2 Условные команды . . . . . . . . . . . . . . . . . . . 26
1.1.3 Команды передачи управления . . . . . . . . . . . . 33
1.1.4 Команды ввода-вывода . . . . . . . . . . . . . . . . 41
1.1.5 Служебные команды . . . . . . . . . . . . . . . . . . 50
1.1.6 Постусловия . . . . . . . . . . . . . . . . . . . . . . 53
1.2 Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1.3 Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1.4 Числа и строки . . . . . . . . . . . . . . . . . . . . . . . . . 67
1.5 Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
1.5.1 $DATA . . . . . . . . . . . . . . . . . . . . . . . . . 74
1.5.2 $GET . . . . . . . . . . . . . . . . . . . . . . . . . . 76
1.5.3 $ORDER . . . . . . . . . . . . . . . . . . . . . . . . 77
1.5.4 $NEXT . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.5.5 $QUERY . . . . . . . . . . . . . . . . . . . . . . . . 80
1.5.6 $NAME . . . . . . . . . . . . . . . . . . . . . . . . . 83
1.5.7 $QLENGTH . . . . . . . . . . . . . . . . . . . . . . 85
1.5.8 $QSUBSCRIPT . . . . . . . . . . . . . . . . . . . . 86
1.5.9 $ASCII . . . . . . . . . . . . . . . . . . . . . . . . . 88
1.5.10 $CHAR . . . . . . . . . . . . . . . . . . . . . . . . . 91
1.5.11 $EXTRACT . . . . . . . . . . . . . . . . . . . . . . . 93
1.5.12 $PIECE . . . . . . . . . . . . . . . . . . . . . . . . . 94
1.5.13 $LENGTH . . . . . . . . . . . . . . . . . . . . . . . 96
1.5.14 $REVERSE . . . . . . . . . . . . . . . . . . . . . . . 98
1.5.15 $FIND . . . . . . . . . . . . . . . . . . . . . . . . . 98
3

4 ОГЛАВЛЕНИЕ
1.5.16 $TRANSLATE . . . . . . . . . . . . . . . . . . . . . 99
1.5.17 $JUSTIFY . . . . . . . . . . . . . . . . . . . . . . . 102
1.5.18 $FNUMBER . . . . . . . . . . . . . . . . . . . . . . 104
1.5.19 $TEXT . . . . . . . . . . . . . . . . . . . . . . . . . 106
1.5.20 $RANDOM . . . . . . . . . . . . . . . . . . . . . . . 108
1.5.21 $VIEW . . . . . . . . . . . . . . . . . . . . . . . . . 109
1.5.22 $SELECT . . . . . . . . . . . . . . . . . . . . . . . . 109
1.5.23 $STACK . . . . . . . . . . . . . . . . . . . . . . . . . 111
1.6 Списковые функции . . . . . . . . . . . . . . . . . . . . . . 113
1.7 Битовые функции . . . . . . . . . . . . . . . . . . . . . . . 119
1.8 Модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
1.9 Рутины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
1.10 Передача параметров . . . . . . . . . . . . . . . . . . . . . 131
1.11 Неопределенные значения . . . . . . . . . . . . . . . . . . . 135
1.12 Шаблоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
1.13 Косвенность . . . . . . . . . . . . . . . . . . . . . . . . . . 143
1.13.1 Косвенность имени . . . . . . . . . . . . . . . . . . 146
1.13.2 Косвенность индексов . . . . . . . . . . . . . . . . . 147
1.13.3 Косвенность метки . . . . . . . . . . . . . . . . . . . 149
1.13.4 Косвенность аргумента . . . . . . . . . . . . . . . . 151
1.13.5 Косвенность шаблона . . . . . . . . . . . . . . . . . 153
1.14 Интерпретатор . . . . . . . . . . . . . . . . . . . . . . . . . 154
1.15 Голая ссылка . . . . . . . . . . . . . . . . . . . . . . . . . . 163
1.16 Очередность выполнения . . . . . . . . . . . . . . . . . . . 167
1.16.1 Очередность вычисления выражений . . . . . . . . 168
1.16.2 Очередность вычисления имен . . . . . . . . . . . . 169
1.17 Стекование $test . . . . . . . . . . . . . . . . . . . . . . . . 172
1.18 Комментарий . . . . . . . . . . . . . . . . . . . . . . . . . . 175
1.19 Стандарт и расширения . . . . . . . . . . . . . . . . . . . . 177
2 Глобалы 183
2.1 B-дерево . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
2.2 Кодирование индексов . . . . . . . . . . . . . . . . . . . . . 187
2.3 Размер блока . . . . . . . . . . . . . . . . . . . . . . . . . . 193
2.4 Кеширование блоков . . . . . . . . . . . . . . . . . . . . . . 198
2.5 Структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
2.6 Индексация . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
2.7 Группировка . . . . . . . . . . . . . . . . . . . . . . . . . . 210
2.8 Каноничность индексов . . . . . . . . . . . . . . . . . . . . 220
2.9 Маппинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

ОГЛАВЛЕНИЕ 5
3 Индексация данных 227
3.1 Общие принципы . . . . . . . . . . . . . . . . . . . . . . . . 227
3.2 Механизм поддержки индекса . . . . . . . . . . . . . . . . 228
3.3 Простой индекс . . . . . . . . . . . . . . . . . . . . . . . . . 230
3.4 Составной индекс . . . . . . . . . . . . . . . . . . . . . . . 233
3.5 Покрывающий индекс . . . . . . . . . . . . . . . . . . . . . 237
3.6 Кластерный индекс . . . . . . . . . . . . . . . . . . . . . . 241
3.7 Хеш-индекс . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
3.8 Битмап индекс (bitmap) . . . . . . . . . . . . . . . . . . . . 247
3.9 Битслайс индекс (bitslice) . . . . . . . . . . . . . . . . . . . 252
3.10 Нормирование значений . . . . . . . . . . . . . . . . . . . . 260
3.11 Выборки по индексу . . . . . . . . . . . . . . . . . . . . . . 262
3.12 Многоиндексная выборка (zig-zag) . . . . . . . . . . . . . . 265
3.13 Дифференциальное индексирование . . . . . . . . . . . . . 269
3.14 Индексация длинных атрибутов . . . . . . . . . . . . . . . 272
3.15 Межтабличный индекс . . . . . . . . . . . . . . . . . . . . 275
3.16 Индекс с условием на вставку . . . . . . . . . . . . . . . . 279
3.17 Индекс на вычисляемый атрибут . . . . . . . . . . . . . . . 282
3.18 Индекс поиска по фрагменту . . . . . . . . . . . . . . . . . 284
3.19 Индексация для шаблона (like) . . . . . . . . . . . . . . . . 287
3.20 Индексация уникального атрибута . . . . . . . . . . . . . . 292
3.21 Массовое перестроение индексов . . . . . . . . . . . . . . 295
3.22 Операции с древовидными индексами . . . . . . . . . . . . 298
3.23 Операции с битовыми индексами . . . . . . . . . . . . . . 303
3.24 Совмещение древовидных и битовых индексов . . . . . . . 308
3.25 Сортировка по индексу . . . . . . . . . . . . . . . . . . . . 312
3.26 Статистики и кардинальность . . . . . . . . . . . . . . . . 318
4 Конкурентный доступ 323
4.1 Параллельность выполнения . . . . . . . . . . . . . . . . . 323
4.2 Блокировки . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
4.3 Транзакции . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
4.4 Блокировки в транзакциях . . . . . . . . . . . . . . . . . . 336
4.5 Функция $INCREMENT . . . . . . . . . . . . . . . . . . . 340
4.6 Функция $BIT . . . . . . . . . . . . . . . . . . . . . . . . . 343
4.7 Дедлоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
4.8 TSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

6 ОГЛАВЛЕНИЕ
5 Обработка ошибок 353
5.1 Состояние ошибки . . . . . . . . . . . . . . . . . . . . . . . 353
5.2 ZTRAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
5.2.1 Cach´e . . . . . . . . . . . . . . . . . . . . . . . . . . 358
5.2.2 MSM . . . . . . . . . . . . . . . . . . . . . . . . . . 364
5.2.3 DTM . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
5.2.4 M3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
5.2.5 GT.M . . . . . . . . . . . . . . . . . . . . . . . . . . 365
5.2.6 MiniM . . . . . . . . . . . . . . . . . . . . . . . . . . 369
5.3 ETRAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
5.3.1 Определение . . . . . . . . . . . . . . . . . . . . . . 371
5.3.2 $ETRAP . . . . . . . . . . . . . . . . . . . . . . . . 372
5.3.3 $ECODE . . . . . . . . . . . . . . . . . . . . . . . . 375
5.3.4 $ESTACK . . . . . . . . . . . . . . . . . . . . . . . . 379
5.3.5 Ошибки в обработчике ошибок . . . . . . . . . . . 381
5.4 $STACK() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
5.5 Трассировка . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
5.6 BREAK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
5.7 MiniM Debugger . . . . . . . . . . . . . . . . . . . . . . . . 401
5.8 Cach´e Debugger . . . . . . . . . . . . . . . . . . . . . . . . 404
5.9 Serenji Debugger . . . . . . . . . . . . . . . . . . . . . . . . 406
6 Внешний мир 409
6.1 Общие принципы . . . . . . . . . . . . . . . . . . . . . . . . 409
6.2 Терминальный интерфейс . . . . . . . . . . . . . . . . . . . 410
6.3 Сокеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
6.4 WEB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
6.4.1 HTTP клиент . . . . . . . . . . . . . . . . . . . . . . 424
6.4.2 Вебсервер на MUMPS . . . . . . . . . . . . . . . . 425
6.4.3 CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
6.4.4 WebLink . . . . . . . . . . . . . . . . . . . . . . . . . 430
6.4.5 MWA . . . . . . . . . . . . . . . . . . . . . . . . . . 433
6.4.6 CSP . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
6.4.7 Проблемы HTTP . . . . . . . . . . . . . . . . . . . . 437
6.4.8 Поверх HTTP . . . . . . . . . . . . . . . . . . . . . 441
6.5 Подключаемые DLL (SO) . . . . . . . . . . . . . . . . . . . 444
6.6 Файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
6.7 Внешние процессы . . . . . . . . . . . . . . . . . . . . . . . 451
6.8 Порты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

ОГЛАВЛЕНИЕ 7
7 Практика применения 457
7.1 Терминальный режим . . . . . . . . . . . . . . . . . . . . . 457
7.2 Редакторы рутин . . . . . . . . . . . . . . . . . . . . . . . . 459
7.3 Экспорт и импорт . . . . . . . . . . . . . . . . . . . . . . . 461
7.4 Препроцессор . . . . . . . . . . . . . . . . . . . . . . . . . . 471
7.5 Формат $HOROLOG . . . . . . . . . . . . . . . . . . . . . 478
7.6 Опции устройств . . . . . . . . . . . . . . . . . . . . . . . . 482
7.7 $X и $Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
7.8 Возврат результатов . . . . . . . . . . . . . . . . . . . . . . 486
7.8.1 Возврат по значению ($$) . . . . . . . . . . . . . . 487
7.8.2 Возврат по ссылке . . . . . . . . . . . . . . . . . . . 488
7.8.3 Запись в предопределенную переменную . . . . . . 489
7.8.4 Возврат значений косвенно . . . . . . . . . . . . . . 490
7.8.5 Итеративный возврат . . . . . . . . . . . . . . . . . 492
7.8.6 Потоковый возврат . . . . . . . . . . . . . . . . . . . 493
7.9 %Z - рутины . . . . . . . . . . . . . . . . . . . . . . . . . . 494
7.10 Планирование файлов . . . . . . . . . . . . . . . . . . . . . 496
7.11 Память и сборка мусора . . . . . . . . . . . . . . . . . . . . 498
7.12 Предсказуемость . . . . . . . . . . . . . . . . . . . . . . . . 504
7.13 Переносимость . . . . . . . . . . . . . . . . . . . . . . . . . 505
A Команды MUMPS 515
B Системные переменные MUMPS 517
C Системные функции MUMPS 519
D Стандартные коды ошибок 521
E ASCII Table 523
F Mнемоники ANSI X3.64 527
G ANSI Escape Sequences (ENG) 531
H ANSI Escape Sequences - VT100 / VT52 (ENG) 539
Предметный указатель 544
Литература 549


Предисловие
Во многом современный мир становится более разнообразным, чем был
раньше. История знает периоды, когда становились доминирующими одни концепции систем баз данных, потом другие. И, пройдя сквозь многие годы, технология систем баз данных, заложенная в системах класса MUMPS, показала свою практичность и нацеленность на результат.
Многие системы баз данных черпали из неё идеи и концепции, реализуя
отдельные части её возможностей и основываясь на вполне прочном и
проверенном фундаменте.
В настоящее время в практику применения входят самые разнообразные концепции систем баз данных и самые разнообразные принципы
и способы их организации. И все это время, с момента создания примерно 40 лет назад, разработчики на языке MUMPS применяли развитые концепции и обеспечивали долгую жизнь своим разработкам. Видя
современные, и не очень, принципы организации данных, выдаваемые
за новые, многие из MUMPS программистов воспринимают их как существенно урезанные по возможностям, чем давно применяемые ими
MUMPS системы.
Много лет назад, видя сколь редко выходят книги по системам баз
данных MUMPS, мне хотелось, чтобы появилась такая книга, которая
бы могла быть использована и как обзорная для квалифицированных
разработчиков, перед которыми стоит задача выбора, и как справочная
по отдельным техническим вопросам для программистов, которым необходимо разобраться в редких малоописанных темах, и как ознакомительная для изучающих компьютерные технологии в области баз данных.
Со временем пришло решение взяться за написание такой книги самостоятельно. В основу книги легли как набор статей по техническим
вопросам применения MUMPS систем, так и статьи с описанием языка
и среды исполнения.
Многому, отраженному в книге, я научился у тех, с кем вместе работал, и описанный в книге материал отражает опыт многих людей и
решенных головоломок в самых различных проектах.
9

10 ОГЛАВЛЕНИЕ
По своему образованию я не писатель, а разработчик, и, конечно,
вижу мир со специфической стороны. Отдельные части книги писались
намного более дотошно, чем другие, что отражает предпочтения в системе ценностей разработчика. Не являясь преподавателем, я не ставил целей получить полноценный учебник с поучающими разделами "Резюме"
и с разделами контрольных вопросов. Думается, что хороший задачник
с примерами еще должен быть написан.
Написание книги на языке, не являющемся языком программирования, для программистов - это большая работа, и в ней важна была моральная поддержка тех, с кем работал и с кем знаком. Как это принято
при написании предисловий, выражаю благодарность всем, к то поддерживал и одобрял эту работу.
Надеюсь, что книга получилась и интересной, и полезной.
Евгений Каратаев
Москва, 2012.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
