- •Рецензенты:
- •Введение 12 Глава 1. Проектирование баз данных 14
- •Глава 2. Субд Visual FoxPro 213
- •Глава 3. Субд Access 308
- •Глава 4. Субд Microsoft sql Server 431
- •Глава 5. Субд Oracle 478
- •Глава 6. Обзор субд 506
- •Глава 1. Проектирование баз данных
- •1.1. История развития баз данных и субд
- •1.2. Введение в субд
- •1.2.1. Основные термины, понятия и определения
- •1.2.2. Классификация субд
- •1) Сетевые, корпоративные, распределенные, клиент-серверные, полнофункциональные, масштабируемые, “большие” субд.
- •2) Локальные, персональные, настольные, файл-серверные, “малые” субд.
- •1.3. Модели данных
- •1.3.1. Типы связей между объектами
- •1.3.2. Формы записи инфологической (концептуальной) модели
- •1.3.3. Уровни представления и независимости данных
- •1.3.4. Порядок взаимодействия пользователя, субд и ос
- •1.3.5. Поддержка целостности базы данных
- •1.3.6. Иерархическая модель
- •1.3.7. Сетевая модель
- •1.3.8. Реляционная модель
- •1.3.8.1. Отношения
- •1.3.8.2. Теоретико-множественные операции с отношениями
- •1.3.8.3. Правила Кодда
- •1.3.8.4. Индексирование таблиц
- •1.3.8.5. Связывание таблиц
- •1.3.9. Постреляционная модель
- •1.3.10. Многомерная модель
- •1.3.11. Объектно‑ориентированная модель
- •1.4. Модели использования баз данных в сети
- •1.4.1. Сеть
- •1.4.2. Модели использования баз данных
- •1.4.2.1. Локальная однопользовательская модель
- •1.4.2.2. Файл-серверная модель
- •1.4.2.3. Клиент-серверная модель
- •В моделях «клиент–сервер»
- •1.4.2.4. Модель удаленного доступа (rda)
- •1.4.2.5. Модель сервера данных
- •1.4.2.6. Трехзвенная распределенная модель
- •1.4.2.7. Модели серверов баз данных
- •1.4.2.8. Клиент-Интернет
- •1.4.2.9. Интерфейс odbc
- •1.4.3. Мониторы обработки транзакций (tpm)
- •1.4.4. Децентрализованное управление базами данных
- •1.4.5. Таблицы в локальных сетях
- •1.5. Проектирование баз данных
- •1.5.1. Принципы и этапы проектирования и создания баз данных
- •2.6. Создание er‑диаграмм для отдельных пользователей.
- •3.4. Создание er‑диаграммы глобальной логической модели.
- •4. Создание глобальной логической модели в среде целевой субд.
- •1.5.2. Методы нормализации и денормализации отношений
- •1.5.3. Правила формирования взаимосвязанных таблиц
- •1.5.4. Модели жизненного цикла и проектирование баз данных
- •1.5.4.1. Модели жизненного цикла
- •1.5.4.2. Обследование, системный анализ и постановка задачи
- •1.5.4.3. Инфологическое проектирование
- •1.5.4.4. Датологическое проектирование
- •1.5.4.5. Проектирование физической модели
- •1.5.4.6. Реализация, интеграция и внедрение
- •1.5.5. Выбор субд
- •1.5.5.1. Сравнение Visual FoxPro, Access, sql Server, Oracle и Excel
- •1.5.5.2. Методика балловой оценки программных средств
- •1.5.6. Case‑средства автоматизации проектирования
- •1. Ориентация на этапы жизненного цикла
- •2. Функциональная полнота
- •3. Степень зависимости от субд
- •4. Тип используемой модели
- •1.6. Использование баз данных
- •1.6.1. Защита информации
- •Пользователя в ms sql Server 7.0
- •1.6.2. Резервирование информации
- •1.6.3. Варианты разработки приложений
- •1.7. Стандартизация баз данных
- •1.8. Язык sql
- •1.8.1. Введение в sql
- •1.8.2. Типы данных sql
- •1.8.3. Оператор выбора данных select
- •1.8.3.1. Назначение и синтаксис оператора
- •1.8.3.2. Объединение таблиц
- •1.8.3.3. Вложенные и коррелированные запросы
- •1.8.3.4. Запросы, использующие exist, any, all
- •1.8.3.5. Стандартные функции
- •1.8.3.6. Запрос с группировкой
- •1.8.4. Операторы обновления базы
- •1.8.4.1. Оператор корректировки данных update
- •1.8.4.2. Оператор удаления записей delete
- •1.8.4.3. Оператор включения записей insert
- •1.8.5. Представления
- •1.9. Транзакции
- •1.9.1. Определение транзакций
- •1.9.2. Организация транзакций
- •1.9.3. Журнал транзакций
- •1.9.4. Журнализация и буферизация
- •1.9.5. Индивидуальный откат транзакций
- •1.9.6. Восстановление после мягкого сбоя
- •1.9.7. Физическая согласованность базы данных
- •1.9.8. Восстановление после жесткого сбоя
- •1.9.9. Параллельное выполнение транзакций
- •1.9.10. Уровни изолированности пользователей
- •1.9.11. Гранулированные синхронизационные захваты
- •1.9.12. Предикатные синхронизационные захваты
- •1.9.13. Метод временных меток
- •1.10. Встроенный sql
- •1.10.1. Особенности встроенного sql
- •1.10.2. Определение курсора
- •1.10.3. Открытие курсора
- •1.10.4. Чтение очередной строки курсора
- •1.10.5. Закрытие курсора
- •1.10.6. Удаление и обновление данных
- •1.10.7. Хранимые процедуры
- •Хранимой процедуры на сервере
- •1.10.8. Триггеры
- •1.10.9. Динамический sql
- •1.11. Архитектура субд и оптимизация запросов
- •1.12. Перспективы развития субд
- •В опросы для самопроверки и контроля
- •Глава 2. Субд Visual FoxPro
- •2.1. Общепринятые обозначения
- •2.2. Основные ограничения
- •2.3. Компоненты Visual FoxPro
- •2.4. Язык программирования FoxPro
- •2.4.1. Создание, компиляция и выполнение программ, процедур и функций
- •2.4.2. Константы
- •2.4.3. Переменные
- •2.4.4. Массивы
- •2.4.5. Операции
- •2.4.6. Команды управления
- •2.4.6.1. Команда проверки условия (If)
- •2.4.6.2. Команда выбора (Do Case)
- •2.4.7. Организация циклов
- •2.4.7.1. Цикл (Do While)
- •2.4.7.2. Счетный цикл (For)
- •2.4.7.3. Цикл сканирования таблицы (Scan)
- •2.4.8. Создание свободных таблиц
- •2.4.8.1. Создание и изменение структуры таблиц
- •2.4.8.2. Заполнение таблиц
- •2.4.9. Редактирование таблиц в диалоговом режиме (Browse, Edit)
- •2.4.10. Перемещение по таблице (Go, Skip)
- •2.4.11. Просмотр таблиц (Display, List)
- •2.4.12. Удаление записей (Delete, Zap, Pack)
- •2.4.13. Редактирование полей в программном режиме (Replace)
- •2.4.14. Локализация и поиск записей в таблице
- •2.4.14.1. Фильтрация данных (Set Filter)
- •2.4.14.2. Последовательный поиск (Locate)
- •2.4.15. Индексирование и открытие таблиц
- •2.4.16. Прямой поиск
- •2.4.17. Одновременная работа с несколькими таблицами
- •2.4.17.1. Рабочие области
- •2.4.17.2. Команда установки связей между таблицами
- •2.4.18. Обмен данными между массивами и таблицами
- •2.4.19. Ввод‑вывод данных сообщений
- •2.4.19.1. Вывод данных на экран (?, ??, ???)
- •2.4.19.2. Вывод сообщения (Wait)
- •2.4.19.3. Вывод сообщения и кнопок (MessageBox)
- •2.4.20. Организация меню
- •2.4.20.1. Общий порядок создания и использования меню
- •2.4.20.2. Вертикальное Popup-меню
- •2.4.20.3. Горизонтальное Bar-меню
- •2.4.20.4. Двухуровневое Pulldown-меню
- •2.4.20.5. Управление доступом к меню
- •2.4.21. Манипулирование файлам и таблицами
- •2.4.22. Математическая обработка таблиц
- •2.4.23. Язык запросов sql
- •2.5. Настройка среды Visual FoxPro
- •2.6. Объекты и классы
- •2.7. События и методы
- •2.8. Общий порядок работы с Visual FoxPro
- •2.9. Создание проекта
- •2.10. Создание базы данных
- •Р ис. 2.10.2. Окно установки контроля целостности связей
- •2.11. Представления (View)
- •2.11.1. Мастер представлений
- •2.11.2. Конструктор представлений
- •2.11.3. Удаленные представления (Remote Views)
- •2.12. Запросы
- •2.12.1. Мастера запросов
- •2.12.2. Конструктор запросов
- •2.12.3. Функции сквозных запросов
- •2.13. Формы
- •2.13.1. Мастера форм
- •2.13.2. Конструктор форм
- •Р ис. 2.13.2.3. Вид отображаемых таблиц
- •2.14. Отчеты
- •2.14.1. Мастера отчетов
- •2.14.2. Конструктор отчетов
- •2.14.3. Команда вывода отчета
- •2.15. Меню
- •2.16. Управление проектом и создание приложения
- •2.16.1. Свойства проекта
- •2.16.2. Параметры проекта
- •2.16.3. Создание приложения
- •2.16.4. Галерея компонентов
- •2.17. Отладка программ
- •2.18. Хранимые процедуры
- •2.19. Классы
- •2.20. Создание класса панели инструментов
- •Р ис. 2.20.1. Вид формы, построенной на основе класса clFormNavigator
- •2.21. Включение в базу ole‑объектов
- •2.22. Обзор дополнительных возможностей
- •2.23. Среда быстрой разработки приложений ‑ пакет MacroFox
- •2.23.1. Назначение
- •2.23.2. Структура
- •2.23.3. Основные макрооператоры
- •2.23.3.1. Описание входного документа (Forma)
- •2.23.3.2. Описание формы отчета (Ofort)
- •2.23.3.3. Описание меню (Menu)
- •2.23.4. Словари баз, функций, форм, таблиц и условий
- •2.23.5. Управление сценариями
- •2.23.6. Ведение таблиц базы данных
- •2.23.7. Формирование отчетов и запросов‑отчетов
- •2.23.8. Сводная обработка данных
- •2.23.9. Супероболочка
- •2.23.10. Порядок работы
- •В опросы для самопроверки и контроля
- •Глава 3. Субд Access
- •3.1. Последовательность работ при создании новой базы данных
- •3.2. Создание базы данных
- •3.2.1. Запуск Access и открытие базы данных
- •3.2.2. Создание пустой базы данных
- •3.2.3. Рабочая среда Access
- •3.2.4. Работа с таблицами
- •3.2.4.1. Создание таблиц
- •3.2.4.2. Связывание таблиц
- •3.2.4.3. Сортировка, поиск и фильтрация записей
- •3.3. Формирование и использование внешних данных
- •3.4. Запросы
- •3.4.1. Запросы на выборку данных
- •3.4.1.1. Простой запрос
- •Р ис. 3.4.1.1.2. Окно конструктора запросов
- •3.4.1.2. Итоговый запрос
- •Р ис. 3.4.1.2.2. Окно конструктора запросов
- •3.4.1.3. Перекрестный запрос
- •3.4.1.4. Динамический запрос
- •3.4.2. Запросы на обновление данных
- •3.4.3. Параметрические запросы
- •3.4.4. Выражения
- •3.5. Формы
- •3.5.1. Автоформы
- •3.5.2. Мастер форм
- •3.5.3. Конструктор форм
- •3.5.3.1. Основные операции над объектами
- •3.5.3.2. Основные элементы управления
- •3.5.3.3. Создание формы
- •3.5.4. Редактирование данных в режиме формы
- •3.6. Отчеты
- •3.6.1. Автоотчеты
- •3.6.2. Мастер отчетов
- •3.6.3. Конструктор отчетов
- •3.6.3.1. Окно предварительного просмотра отчета
- •Р ис. 3.6.3.2. Окно конструктора отчетов
- •3.6.4. Диаграммы
- •3.6.5. Составные отчеты
- •3.6.6. Дополнительные возможности
- •3.7. Пользовательский интерфейс
- •3.7.1. Панель инструментов
- •3.7.2. Меню и ленты пользователей
- •3.7.3. Контекстные меню
- •3.7.4. Связывание меню и панелей с формами и отчетами
- •3.7.5. Кнопочная форма
- •3.7.6. Настройка параметров среды и запуска приложения
- •3.7.7. Изменение меню и панелей инструментов средствами Visual Basic
- •3.8. Макросы
- •3.9. Web‑страницы
- •3.9.1. Экспорт объектов в формат html
- •3.9.2. Страницы доступа
- •3.10. Интеграция Access с другими компонентами Office
- •3.10.1. Использование Microsoft Excel при работе Access
- •3.10.2. Использование Microsoft Word при работе с Access
- •3.10.3. Добавление ActiveX‑элементов
- •3.10.4. Использование Access в качестве сервера
- •3.11. Совместное использование баз данных в сети
- •3.12. Разработка клиент‑серверных приложений
- •3.12.1. Доступ к базам данных через odbc
- •3.12.2. Доступ к базам данных через ole db, ado
- •3.12.3. Способы работы с внешними данными
- •3.12.3.1. Присоединение таблиц
- •3.12.3.2. Сквозные запросы
- •3.12.3.3. Хранимые процедуры
- •3.12.3.4. Объектная модель dao
- •3.12.4. Проекты Access
- •3.12.4.1. Создание проектов
- •3.12.4.2. Изменение свойств таблиц
- •3.12.4.3. Схемы базы данных
- •3.12.4.4. Конструктор представлений
- •3.12.4.5. Хранимые процедуры
- •3.12.4.6. Сортировка и отбор записей в формах и отчетах
- •3.13. Репликация баз данных
- •3.13.1. Репликация баз данных Access
- •3.13.2. Репликация проектов Access
- •3.14. Администрирование баз данных и проектов
- •3.14.1. Архивирование, сжатие и восстановление
- •3.14.2. Стандартные средства субд защиты базы данных
- •3.14.3. Примеры оригинальных программные средств защиты базы данных
- •3.14.3.1. Защита параметров запуска приложений от изменений
- •3.14.3.2. Регистрация пользователей и установка их полномочий
- •3.14.3.3. Формирование журнала аудита (изменений) базы данных
- •3.15. Перенос базы данных Access на платформу sql Server
- •3.16. Обзор инструментальных средств Office Developer Edition
- •3.17.1. Быстрое отслеживание данных
- •3.17.2. Создание отчетов
- •3.17.3 Обмен с другими пользователями
- •3.17.4. Быстрые способы начала работы
- •3.17.5 Интерфейс пользователя
- •3.17.6 Средства создания объектов
- •3.17.7. Режимы отчета и макета
- •3.17.8 Разделенные формы
- •3.17.9 Внедренные макросы в формах и отчетах
- •3.17.10. Новые типы данных и элементы управления
- •3.17.11. Средства конструирования и анализа
- •3.17.12. Безопасность
- •3.17.13. Интеграция с Службы Windows SharePoint Services
- •3.17.14. Сбор данных с помощь форм InfoPath и Outlook
- •3.17.15. Экспорт в форматы pdf и xps
- •3.17.16. Работа с внешними данными
- •3.17.17. Способы устранения неполадок
- •3.17.18. Средства проверки орфографии
- •3.17.19. Создание ленты пользователя
- •3.18.1. Создание Web-базы данных для публикации в Интернете
- •Подготовка
- •Начало работы с пустой веб-базой данных
- •Создание веб-таблицы.
- •Добавление поля щелчком таблицы.
- •Изменение свойств поля.
- •Добавление вычисляемого поля.
- •Настройка правил проверки данных.
- •Создание правила проверки поля и соответствующего сообщения.
- •Создание правила проверки записи и соответствующего сообщения.
- •Создание веб-формы.
- •Создание веб-отчета
- •Сделайте форму навигации веб-формой, отображаемой по умолчанию.
- •Синхронизация веб-базы данных
- •3.18.2. Настройка ленты пользователя
- •Вопросы для самопроверки и контроля
- •Глава 4. Субд Microsoft sql Server
- •4.1. Характеристика
- •4.2. Старт, остановка и приостановка sql Server
- •4.2.1. Старт sql Server
- •4.2.2. Приостановка sql Server
- •4.2.3. Остановка sql Server
- •4.2.4. Регистрация сервера
- •4.2.4.1. Окно регистрации сервера
- •4.3. Работа с базой данных
- •4.3.1. Организация и создание базы данных
- •4.3.1.1. Физическая организация
- •4.3.1.2. Размещение файлов
- •4.3.1.3. Создание базы данных средствами sql Server Enterprise
- •4.3.2. Создание и настройка таблицы базы данных
- •4.3.3. Создание и настройка диаграмм
- •4.3.4. Заполнение таблиц
- •4.3.5. Создание и настройка представлений
- •4.3.6. Язык запросов Transact‑sql
- •4.3.6.1. Основные элементы
- •4.3.6.2. Операции
- •4.3.6.3. Операторы
- •4.3.6.4. Базы данных
- •4.3.6.5. Таблицы
- •4.3.6.6. Запросы
- •4.3.6.7. Представления
- •4.3.6.8. Индексы
- •4.3.6.9. Статистика
- •4.3.6.10. Фрагментация
- •4.3.6.11. Курсоры
- •4.3.6.12. Транзакции и блокировки
- •4.3.6.13. Системные переменные, функции и хранимые процедуры
- •4.3.7. Хранимые процедуры
- •4.3.8. Создание триггеров
- •4.3.9. Формирование правил контроля вводимых значений
- •4.3.10. Формирование стандартных значений
- •4.4. Администрирование sql Server
- •4.4.1. Настройка параметров
- •4.4.2. Системные базы данных и таблицы
- •4.4.3. Тестирование и сжатие баз данных
- •4.4.4. Обмен данными с внешними системами
- •4.4.5. Создание резервных копий и восстановление баз данных
- •4.4.6. Использование службы выполнения расписаний sql Server Agent
- •4.4.7. Защита данных
- •4.4.8. Репликация данных
- •4.4.9. Взаимодействие sql‑сервера с Excel и Word
- •4.4.10. Перенос приложения Access в среду sql Server
- •В опросы для самопроверки и контроля
- •Глава 5. Субд Oracle
- •5.1. Основные понятия
- •5.1.1. Файлы данных и табличные пространства
- •5.1.2. Таблицы и индексы
- •5.1.3. Кластеры
- •5.1.4. Словарь данных
- •5.1.5. Объекты базы данных
- •5.1.6. Виды
- •5.1.7. Триггеры
- •5.1.12. Журналы транзакций
- •5.1.13. Экземпляр базы данных
- •5.1.14. Типы данных
- •5.1.14.1. Строки
- •5.1.14.2. Числа
- •5.1.14.3. Битовые строки
- •5.1.14.4. Дата и время
- •5.3.1. Таблицы
- •5.3.2. Представления
- •5.3.3. Запросы
- •5.3.4. Средства разграничения доступа
- •5.3.4.1. Создание и удаление пользователя
- •5.3.4.2. Привилегии
- •5.4.1. Правила написания программы
- •5.4.2. Операторы управления
- •5.4.3. Выражения
- •5.4.4. Переменные
- •5.4.4.1. Скалярные переменные
- •5.4.4.2. Объектные переменные
- •5.4.4.3. Записи
- •5.4.4.4. Коллекции
- •5.4.5. Пакеты
- •5.4.6. Процедуры и функции
- •5.4.7. Курсоры
- •5.4.8. Транзакции
- •5.4.9. Обработка исключений
- •5.4.10. Динамический sql‑оператор
- •5.4.11. Внедрение sql, pl/sql в прикладные программы
- •В опросы для самопроверки и контроля
- •Глава 6. Обзор субд
- •6.1. Российская субд линтер
- •Основные характеристики субд линтер
- •Количественные параметры бд линтер
- •6.2. Субд MySql
- •6.3. Субд InterBase
- •6.4. Субд Firebird
- •6.5. Субд db2
- •6.6. Субд progress
- •6.7. Субд PostgreSql
- •6.8. Субд oracle
- •6.9. Субд Microsoft sql Server
- •6.10. Постреляционная субд Cache’
- •6.11. Распределенная файловая система Google File System (gfs)
- •6.12. Berkeley db – движок для субд
- •6.13 Субд – движок sqLite
- •6.14 Субд Visual Clarion
- •Пункт меню «Личные карточки»:
- •Пункт меню «Выбор информации»
- •2.1. Движение кадров.
- •2.1.1. Приказы оПриеме на Работу.
- •Глава 7. Практикум
- •7.1. Язык запросов sql
- •7.1.1. Запросы на чтение данных
- •7.1.2. Запросы на обновление данных
- •7.1.3. Представления
- •7.2. Работа с базами данных
- •7.3. Курсовые работы
- •1. Учет успеваемости студентов.
- •2. Учет обмена валюты.
- •3. Учет объектов строительства.
- •4. Учет выдачи и возврата книг.
- •5. Учет авиапассажиров.
- •6. Учет производства сельскохозяйственных культур.
- •7. Учет выпуска изделий.
- •8. Учет платежей налогов.
- •9. Учет поставок товаров.
- •10. Учет сбросов отравляющих веществ в окружающую среду.
- •11. Учет уволившихся с предприятия.
- •12. Учет призеров Олимпийских игр.
- •14. Учет участников олимпиады.
- •15. Учет проданных товаров.
- •16. Учет малых предприятий.
- •17. Учет больных в больнице.
- •18. Учет движения общественного транспорта.
- •19. Учет дорожно-транспортных происшествий.
- •20. Учет платежных поручений в банке.
- •21. Учет договоров займа.
- •22. Учет проданных ценных бумаг.
- •23. Учет кадров.
- •24. Учет очередников на получение жилья.
- •25. Учет исполнительской дисциплины.
- •26. Учет книг в библиотеке.
- •27. Учет переселенцев.
- •28. Учет успеваемости школьников.
- •29. Учет нарушителей трудовой дисциплины на предприятии.
- •30. Учет семейного бюджета.
- •Приложения Приложение 1. Ответы на вопросы для самопроверки
- •Глава 1. Проектирование баз данных
- •Глава 2. Субд Visual FoxPro
- •Глава 3. Субд Access
- •Глава 4. Субд Microsoft sql Server
- •Глава 5. Субд Oracle
- •Приложение 2. Вопросы для экзаменационных билетов
- •Приложение 3. Встроенные функции субд Visual FoxPro
- •Математические функции
- •Строковые функции
- •Функции работы с датами
- •Функции преобразования типов данных
- •Функции проверки файлов и дисков
- •Функции времени
- •Функции анализа условий, типов и наличия данных
- •Функции подстановки
- •Функции работы с массивами
- •Функции работы с цветом
- •Приложение 4. События, методы и свойства объектов субд Visual FoxPro События
- •Свойства
- •Приложение 5. Встроенные функции pl/sql субд Oracle
- •Символьные функции
- •Функции преобразования
- •Календарные функции
- •Смешанные функции
- •Приложение 6. Оформление курсовой работы с примером Общие положения
- •Организация выполнения курсовой работы. Структура и требования к содержанию курсовой работы
- •Основные требования по оформлению курсовой работы
- •Оформление структурных элементов курсовой работы
- •Использование и оформление рисунков
- •Использование и оформление таблиц
- •Использование и оформление формул
- •Оформление примечаний и ссылок
- •Правила оформления списка использованных источников
- •Правила оформления приложений
- •Оформление содержания
- •Курсовая работа
- •Пример оформления курсовой работы
- •Курсовая работа
- •Содержание
- •Введение 3
- •Введение 12
- •Глава 1. Проектирование баз данных 14
- •Глава 2. Субд Visual FoxPro 213
- •Глава 3. Субд Access 308
- •Глава 4. Субд Microsoft sql Server 431
- •Глава 5. Субд Oracle 478
- •Глава 6. Обзор субд 506
- •Введение
- •1 Постановка задачи
- •2 Входная информация
- •3 Логическая модель базы
- •4 Выходная информация
- •5 Обращение к приложению
- •Заключение
- •Предметный указатель
- •Библиографический список
- •Плещёв Владимир Васильевич Базы данных.
- •С примерами и упражнениями
6.12. Berkeley db – движок для субд
Berkeley DB (BDB) – высокопроизводительная встраиваемая база данных, реализованная в виде библиотеки (содержание данного пункта является полной копией работы http://bourabai.kz/dbt/dbms/berkeleydb.htm). BDB является нереляционной базой данных, то есть она хранит пары ключ / значение как массивы байтов и поддерживает множество значений для одного ключа. BDB может обслуживать тысячи процессов или потоков, одновременно манипулирующих базами данных размером в 256 терабайт, на разнообразном оборудовании под различными операционными системами, включая большинство UNIX-подобных систем и Windows, а также на операционных системах реального времени. Образно говоря, Berkeley BD – СУБД-невидимка, которой пользуются миллионы людей, не подозревая о ее существовании, так как она представляет собой “движок” - ядро СУБД, над которым программисты – разработчики создают свои СУБД, ОС и другие приложения, оперирующие большими массивами данных.
Первая версия Berkeley DB была разработана в Университете Беркли во время разработки BSD версии 4.3 (июнь 1986 года). Netscape попросила авторов Berkeley DB улучшить и расширить библиотеку – в то время версию 1.85, – чтобы она удовлетворяла их требованиям к использованию в сервере LDAP и в браузере Netscape. Этот запрос привёл к созданию Sleepycat Software (купленной корпорацией Oracle в феврале 2006 года). Berkeley DB распространяется под лицензией Sleepycat Public License (англ.), которая была одобрена OSI и FSF. Программа поставляется с полным исходным кодом, средствами сборки, инструментами тестирования и документацией. Качество кода и практичность вместе со свободной лицензией привело к использованию Berkeley DB во многих свободных и открытых программах. В рамках техники двойного лицензирования Oracle также распространяет проприетарную лицензию на использование библиотеки в закрытых проектах.
История СУБД-невидимки
Среди программ с большой историей есть по-настоящему удивительные артефакты. Численность армий их пользователей измеряется даже не десятками, а сотнями миллионов. Правда, речь идет о косвенных пользователях, в основном и не подозревающих о существовании замечательных программ-невидимок.
В 1991 г., когда в Университете Беркли велись работы над проектом свободного от лицензионных ограничений клона ОС UNIX, перед разработчиками встала задача реализовать аналог одной из многочисленных библиотек – dbm. В те времена широко распространенная и востребованная dbm реализовывала относительно несложные механизмы однопользовательского хранилища данных. Востребованность же библиотеки объяснялась просто – она освобождала программистов от повторного решения в какой-то мере тривиальных задач накопления и хранения данных. Один из будущих авторов знаменитой книги “Дизайн и реализация ОС 4.4BSD” (“The Design and Implementation of the 4.4BSD Operating System” и исходные тексты BSD UNIX стали учебной партой для нескольких поколений программных архитекторов и системных программистов), ведущий архитектор 4.4BSD Кейт Бостик (Keith Bostic), предложил разработать свободный от лицензионного кода AT&T аналог dbm участникам проекта Марго Зельцер и Михаэлю Олсону. C этого момента началась история замечательного во всех отношениях программного продукта – Berkeley DB.
Во-первых, он уникален тем, что объединил разработчиков на долгие годы, и это само по себе уже редкость – достаточно упомянуть тот факт, что Бостик и Зельцер стали счастливыми супругами, а в своем блоге Марго буквально пару месяцев назад набросала планы на ближайшие десять лет, и они полны оптимизма.
Во-вторых, продукт, изначально создававшийся и распространявшийся на основе более чем либеральной BSD-лицензии, в конце концов позволил его разработчикам стать респектабельными бизнесменами, не изменяя приверженности свободным берклиевским традициям.
В-третьих, респектабельность семейного бизнеса Бостика, Зельцер и “примкнувшего к ним” Олсона получила убедительное доказательство после приобретения его гигантом мира баз данных Oracle (сумма и условия сделки, происшедшей в феврале этого года, не афишировались). И наконец.
В четвертых – Berkeley DB не повторила участи многих “прикупленных по случаю” программных проектов. Продукт развивается, и в последней, вышедшей недавно версии, предлагает пользователям совершенно новую функциональность.
Современные СУБД, использующие языки запросов (например, SQL), во многом похожи на систему, образованную компилятором с языка высокого уровня и аппаратными средствами целевой для этого компилятора машины. В данной системе высокоуровневый язык транслируется в некоторый промежуточный код, преобразуемый в бинарный код целевой машины. И наконец, бинарный код выполняется аппаратными средствами. В принципе, современные СУБД на уровне макроархитектуры отличаются от этой модели разве что спецификой промежуточного кода и системой команд аппаратных средств (к слову, “машины баз данных” в аппаратном смысле – не такая уж и редкость). Berkeley DB в подобной макроархитектуре занимает уровни от промежуточного кода (иначе говоря – среднеуровневого) до аппаратных средств. Естественно, Berkeley DB скрывает от программиста нюансы и сложности аппаратного уровня, предоставляя в распоряжение несоизмеримо более высокоуровневые возможности. Важно только не забывать, что все познается в сравнении, и макроассемблер сам является низкоуровневым средством по сравнению с современным объектно-ориентированным языком.
Berkeley DB позволяет использующему библиотеку программисту удобно оперировать базами данных и записями в них. В трактовании некоторых терминов Berkeley DB отличается от высокоуровневых СУБД, в большинстве же случаев терминология аналогична. Так, запись Berkeley DB, являющаяся парой, образованной ключом-идентификатором записи и данными записи, в некотором смысле идентична записи в двухколоночной таблице в терминах реляционных БД. Но так как и данные, и даже ключ в Berkeley DB могут сами быть наборами данных (например, структурами языка C), то вполне допустимы аналогии и с многоколоночными таблицами. Понятие базы данных в Berkeley DB, напротив, радикально отличается от так же звучащего термина высокоуровневых аналогов – здесь это множество записей с одинаковыми типами ключа и данных, формируемое на основании выбранного программистом механизма доступа (в высокоуровневых СУБД, в свою очередь, последний обычно полностью скрыт).
В Berkeley DB существуют и уникальные конструкции, и, естественно, уникальные термины для их обозначения. Так, окружение (environment) Berkeley DB – это конструкция, позволяющая оперировать множеством БД с записями разных типов (здесь и далее под типом записи понимается пара типов ключа и данных) как единым целым. К специфическим понятиям Berkeley DB следует также отнести вторичные БД, позволяющие устранить важное и очевидное ограничение Berkeley DB, суть которого в неявной форме была только что указана. Речь, естественно, идет о единственности понятия ключа в записи Berkeley DB. А как быть, если данные записи представляют собой наборы данных, и программисту нужен, например, быстрый поиск в базе не только по ключам, но и по значениям определенных полей в этих наборах данных? Без вторичных баз для решения подобной задачи было бы необходимо последовательно просматривать записи базы до выполнения условия поиска, что крайне неэффективно. Вторичные же базы данных хранят индексы полей наборов данных записей и позволяют использовать механизмы быстрого поиска.
Следует заметить, что создание вторичной БД инициируется программистом, а ведение поддерживается Berkeley DB в полностью автоматическом режиме (вторичная БД недоступна по записи). Впрочем, упомянутый как неэффективный механизм последовательного просмотра (иначе говоря – доступа) к записям базы данных часто бывает необходим. В Berkeley DB он реализован с помощью курсоров (cursor), для которых существует более распространенное название итераторов.
Методы доступа Berkeley DB – это механизмы, позволяющие эффективно решать задачи поиска записи по ключу, добавления и удаления записей. В зависимости от характера (типа) ключей можно выделить два класса методов доступа. Так, для ключей, характеризующих содержимое записи, применяются методы доступа с помощью сбалансированных деревьев (BTree) и хэш-функций (Hash). Для тех баз данных, в которых ключи характеризуют уникальный логический номер записи, используются методы доступа на основе очереди (Queue) и “номера записи” (Recno).
Упомянутый ранее язык Berkeley DB (аналогичный по уровню макроассемблеру) – это, естественно, раз мы ведем речь о библиотеке, – интерфейс прикладного программирования (API). Следует отметить, что, несмотря на язык разработки (ANSI C), Berkeley DB – красиво написанная объектно-ориентированная программа, и об этом надо знать для того, чтобы изучать ее отлично документированный API. Ключевая структура данных в Berkeley DB – дескриптор базы (C-структура __db, декларацию которой можно найти в файле db.in, находящемся в подкаталоге dbinc дистрибутива Berkeley DB), содержит указатели на функции API – методы, и поэтому во многом аналогична классу, например, в С++. Поэтому в документации Berkeley DB принят следующий шаблон описания многих функций:
DB->имя_функции()
Эта запись означает, что подобные функции допустимо использовать только после создания базы данных (результатом которого является в том числе и формирование структуры дескриптора, для него в документации принято имя типа DB) и только посредством вызова функции разыменованием указателя на нее в созданном дескрипторе:
#include <db.h>
typedef struct __db DB;
/* резервируем место под указатель на дескриптор базы */
DB db0_handle ;
/* создаем базу и дескриптор базы, инициируем указатель на него */
db_create(*db0_handle ...);
/* удаляем базу, вызывая метод DB->close разыменованием указателя в дескрипторе */
db0_handle->close( db0_handle...);
На самом деле после подобного краткого описания Berkeley DB можно было бы и остановиться, потому что программа сопровождается великолепной документацией, которую следовало бы брать за образец всем разработчикам ПО (и не только распространяемого с открытыми исходными текстами). И все же следует сказать несколько слов о том, что Berkeley DB позволяет получить использующему ее программисту.
Во-первых, начиная с последней версии, выпущенной уже под эгидой Oracle, Berkeley DB приобрела одно совершенно уникальное свойство, позволяющее устранить существенный недостаток “встраиваемых” программ.
Давайте представим себе следующую ситуацию – вы разработали некий программный продукт с использованием библиотеки Berkeley DB и передали его на эксплуатацию заказчику. Но вот появились исходные коды новой версии библиотеки, устраняющие, например, только обнаруженную ошибку (даже очень хорошие программы не идеальны). Что вы должны сделать, чтобы обезопасить своего заказчика от потенциальных рисков, связанных с этой ошибкой? Естественно, пересобрать свою программу с новой версией libdb и переинсталлировать ее у заказчика. А если специфика его работы не допускает остановки исполнения вашей задачи? Именно для таких случаев Berkley DB предлагает механизм модернизации бинарного кода библиотеки без остановки сервиса базы данных.
Во-вторых, реализованный в Berkeley DB механизм транзакций (одновременных множественных операций с базами данных) полностью соответствует перечню свойств ACID (Atomicity, Consistency, Isolation, Durability). Это означает, что транзакции Berkeley DB действительно атомарны (т. е. неделимы и гарантированно приводят или к требуемым изменениям, или вообще не изменяют состояния базы данных), непротиворечивы (не приводят к запрещенным состояниям базы данных), изолированы (какое-либо взаимодействие одновременных транзакций, инициированных разными пользователями, невозможно) и наконец, надежны (сбои в работе системы после завершения транзакции не приводят к потере ее результатов).
В-третьих, последняя версия предлагает развитый набор средств репликации баз данных, что, учитывая неигрушечные “ограничения” (например, размер базы данных до 256 ТВ), позволяет создавать программы со “взрослыми” возможностями масштабирования.
В-четвертых, Berkeley DB очень хорошо и быстро делает то, что должна делать. При исполнении на современных ПК Berkeley DB позволяет выполнять примерно миллион операций чтения и более полумиллиона операций записи в секунду, а в зависимости от операционной среды количество полноценных ACID-транзакций в секунду колеблется от 30 до 90 тысяч. Качество реализации Berkeley DB подтверждают многочисленные факты. Например, во время бета-тестирования платформы для электронной коммерции Steam, основанной на Berkeley DB, за 20 месяцев без единого потерянного байта или сбоя было обработано более десяти миллионов транзакций, инициированных семью сотнями тысяч пользователей, при этом система умышленно оставлялась на несколько месяцев без какого-либо присмотра со стороны администраторов.
В-пятых, Berkeley DB – разработка, не страдающая манией гигантизма. Динамически загружаемая библиотека, собранная в ОС Windows XP, занимает немногим больше 500 KB.
В общем, эта программа заслуживает того, чтобы вы ее изучили и использовали. Тем более что распространяется Berkeley DB на основании двух лицензий одновременно, и принципы лицензирования ни в чем не противоречат ни требованиям сторонников открытого ПО, ни придерживающимся традиционных принципов собственности разработчиков. Михаэль Олсон, будучи президентом и CEO компании Sleepycat, так охарактеризовал принцип двойного лицензирования – если вы пришли к нам из мира открытых исходных текстов, вы пришли в мир открытых исходных текстов, если же вы – собственник закрытого ПО, мы ничем не отличаемся для вас от всех остальных ваших поставщиков.
Архитектура Berkeley DB
Berkeley DB примечательна своей простой архитектурой в сравнении с другими системами баз данных, такими как, например Microsoft SQL Server и Oracle Database. Например, в ней отсутствует сетевой доступ — программы используют базу данных через вызовы внутрипроцессного API. Она поддерживает SQL в качестве одного из интерфейсов, начиная с версии 5.0, хотя и не поддерживает столбцы в таблицах в традиционном понимании на уровне внутренней архитектуры. Berkeley DB предполагает работу с парами ключ-значение, где ключ и значение могут иметь фиксированную или переменную длину, а функция сравнения ключей может быть написана и назначена прикладным программистом.
Программа, которая использует БД, сама решает, как данные сохраняются в записи; БД не налагает ограничений на данные, хранимые в записях. Запись и её ключ оба могут иметь размер до четырёх гигабайт.
Berkeley DB поддерживает необходимые возможности баз данных, такие как ACID-транзакции, детальные блокировки, интерфейс распределённых транзакций XA, горячее резервное копирование и репликацию. Berkeley DB может использоваться как средство для построения хранимых индексов, так и в качестве хранилища данных.
Oracle предлагает BDB в трёх вариантах:
Berkeley DB — собственно библиотека на языке “C”;
Berkeley DB Java — библиотека, переписанная на Java (поддержка Google Android, Apache Maven);
Berkeley DB XML — библиотека на Си, реализующая XML-СУБД на основе Berkeley DB со средствами работы с XML (Xerces, XPath, XQuery, XQilla).
Berkeley DB входит в состав большинства дистрибутивов Linux. Существуют интерфейсные средства для работы с Berkeley DB на Perl, Python и других языках.
Программы, в которых используется Berkeley DB
Berkeley DB является хранилищем данных для серверов LDAP, СУБД и множества других проприентарных и свободных программ. Ниже приведён список программ, в которых для хранения данных используется Berkeley DB:
Bogofilter — свободный спам-фильтр который хранит свои списки ключевых слов в Berkeley DB;
Caravel CMS — свободный web-движок изначально разработанный для использования в более чем 2000 организаций Меннонитской церкви;
Citadel — свободная платформа совместной работы, в которой все данные, включая базу сообщений, хранятся в Berkeley DB;
Fedora Directory Server — сервер каталогов уровня предприятия c открытым исходным кодом. Изначально именно под нужды FDS (тогда сервер назывался Netscape Directory Server) была адаптирована академическая версия BerkeleyDB;
Jabberd2 — сервер сети Jabber;
KDevelop — интегрированная среда разработки для Linux и других Unix-подобных операционных систем;
KLibido — свободный клиент новостных групп USENET, ориентированный на скачивание бинарных файлов;
MemcacheDB — Распределённое постоянное хранилище данных, реализующее интерфейс Memcached;
Movable Type — проприетарная система публикации блогов, разработанная калифорнийской компанией Six Apart;
MySQL — поддержка таблиц BDB включена в дистрибутив исходного кода MySQL начиная с версии 3.23.34 и в бинарную версию MySQL-Max. BerkeleyDB обеспечивает транзакционный обработчик таблиц для MySQL. Использование BerkeleyDB повышает для таблиц шансы уцелеть после сбоев, а также предоставляет возможность осуществлять операции COMMIT и ROLLBACK для транзакций. Дистрибутив исходного кода MySQL поставляется с дистрибутивом BDB, содержащим несколько небольших исправлений, которые позволяют устранить определённые проблемы при работе с MySQL. Начиная с версии 5.1 таблицы BDB более не поддерживаются;
OpenLDAP — свободная реализация “Облегчённого протокола доступа к каталогам” (LDAP);
Redland — прикладной каркас для RDF. Может использовать BDB для постоянного хранения данных (троек);
RPM — Менеджер пакетов RedHat;
Subversion — Система управления версиями, разработанная чтобы заменить CVS;
Sun Grid Engine — Свободная система управления распределёнными ресурсами. Самый популярный планировщик пакетных очередей задач для вычислительных ферм;
Spamassassin — Антиспамовое приложение;
Wialon — система спутникового мониторинга транспорта, работающая через Web-интерфейс.
