М.: СОЛОН-Пресс, 2015. — 320 с.: ил. ISBN 978-2-7466-7383-0 EAN 9782746673830

advertisement
Тарасов С. В. СУБД для программиста. Базы данных изнутри. —
М.: СОЛОН-Пресс, 2015. — 320 с.: ил.
ISBN 978-2-7466-7383-0
EAN 9782746673830
Книга охватывает различные этапы разработки и сопутствующие им
ситуации из практики программистов приложений, работающих с
системами управления базами данных. Даются рекомендации по выбору
решений как в проектировании (архитектуре), так и в программировании
автоматизированных информационных систем уровня предприятия.
Приводятся примеры для различных СУБД и моделей: Microsoft SQL
Server, PostgreSQL, Firebird, Oracle, XML, NoSQL.
Для программистов, студентов и других специалистов в области
информационных технологий, а также всех интересующихся темой
разработки приложений баз данных.
1
Формат 70×100/16. Объем 20 п. л. Тираж
экз.
Содержание
Введение.............................................................................................................. 5
Основные понятия ........................................... Error! Bookmark not defined.
База данных и СУБД .................................... Error! Bookmark not defined.
Типы приложений: транзакционная и аналитическая обработка .....Error!
Bookmark not defined.
Клиент-серверные и встроенные СУБД..... Error! Bookmark not defined.
Сноска. Firebird 2.5: состояние ............... Error! Bookmark not defined.
Основные модели данных: иерархическая, сетевая, реляционная ...Error!
Bookmark not defined.
Иерархическая модель ............................. Error! Bookmark not defined.
Сетевая модель ......................................... Error! Bookmark not defined.
Реляционная модель ................................. Error! Bookmark not defined.
Другие подходы и модели данных .............. Error! Bookmark not defined.
Модель «Сущность-атрибут-значение» (EAV) ..... Error! Bookmark not
defined.
Неполно структурированные модели данных ...... Error! Bookmark not
defined.
Документ-ориентированная модель и NoSQL ..... Error! Bookmark not
defined.
Многомерные модели данных ................ Error! Bookmark not defined.
О применимости NoSQL ......................... Error! Bookmark not defined.
Множественная и навигационная обработка, менеджеры записей ..Error!
Bookmark not defined.
Объектная модель и объектно-реляционная проекция .. Error! Bookmark
not defined.
SQL как универсальный входной язык ...... Error! Bookmark not defined.
Проектирование ............................................... Error! Bookmark not defined.
Терминология уровней ................................ Error! Bookmark not defined.
Первичные и прочие ключи ........................ Error! Bookmark not defined.
Внешние ключи и связи ............................... Error! Bookmark not defined.
Нормализация и денормализация ............... Error! Bookmark not defined.
1НФ............................................................ Error! Bookmark not defined.
2
2НФ............................................................ Error! Bookmark not defined.
3НФ............................................................ Error! Bookmark not defined.
Деморализуем... то есть денормализуем: «звезда» и «снежинка» ....Error!
Bookmark not defined.
Типовая архитектура данных аналитических приложений ..............Error!
Bookmark not defined.
Переносимость между СУБД ...................... Error! Bookmark not defined.
Абстрагирование от СУБД ...................... Error! Bookmark not defined.
Абстрагирование от входного языка СУБД .......... Error! Bookmark not
defined.
Использование подмножества входного языка .... Error! Bookmark not
defined.
Типовые структуры ...................................... Error! Bookmark not defined.
Моделирование связей разных типов ..... Error! Bookmark not defined.
Хронологические данные ........................ Error! Bookmark not defined.
Иерархические данные и деревья в SQL Error! Bookmark not defined.
Интернационализация/локализация данных и проброс контекста ..Error!
Bookmark not defined.
Метаданные .................................................. Error! Bookmark not defined.
Реестр объектов и аудит ............................... Error! Bookmark not defined.
Безопасность и доступ к данным................ Error! Bookmark not defined.
Проектирование физического хранения .... Error! Bookmark not defined.
Физическая организация памяти ............ Error! Bookmark not defined.
Оперативная и долговременная память . Error! Bookmark not defined.
Дисковые массивы ................................... Error! Bookmark not defined.
Оперативная память ................................. Error! Bookmark not defined.
Индексация данных ................................. Error! Bookmark not defined.
Секционирование данных ....................... Error! Bookmark not defined.
Неполно структурированные данные и высокая нагрузка ................Error!
Bookmark not defined.
Относительность понятия высокой нагрузки ....... Error! Bookmark not
defined.
Особенности использования РСУБД и НСМД (NoSQL) ..............Error!
Bookmark not defined.
Нужно ли моделировать? ............................. Error! Bookmark not defined.
3
Моделирование против ручного кодирования: пример .................Error!
Bookmark not defined.
Большие данные как состояние отрасли .... Error! Bookmark not defined.
Программирование с испытаниями................ Error! Bookmark not defined.
Типы соединений в SQL на примерах ........ Error! Bookmark not defined.
Исходники и синхронизация структур ....... Error! Bookmark not defined.
Некоторые особенности программирования ............ Error! Bookmark not
defined.
Параметризация запросов и SQL-инъекции ......... Error! Bookmark not
defined.
Сравнение с неопределёнными (пустыми) значениями ................Error!
Bookmark not defined.
Работа со строками .................................. Error! Bookmark not defined.
Работа с датами ........................................ Error! Bookmark not defined.
Генерация идентификаторов записей ..... Error! Bookmark not defined.
Транзакции, изоляция и блокировки .......... Error! Bookmark not defined.
Уровни SQL-92 ......................................... Error! Bookmark not defined.
Блокировки ............................................... Error! Bookmark not defined.
Взаимные блокировки процессов (deadlock) ........ Error! Bookmark not
defined.
Версии данных ......................................... Error! Bookmark not defined.
Проявления эффектов изоляции ............. Error! Bookmark not defined.
Толстые транзакции ................................. Error! Bookmark not defined.
Загрузка данных ........................................... Error! Bookmark not defined.
Пакетная загрузка ..................................... Error! Bookmark not defined.
Вставка в толстой транзакции................. Error! Bookmark not defined.
РСУБД и неполно структурированные данные ........ Error! Bookmark not
defined.
Поддержка XML ....................................... Error! Bookmark not defined.
Поддержка JSON ...................................... Error! Bookmark not defined.
Выводы ...................................................... Error! Bookmark not defined.
Постраничные выборки ............................... Error! Bookmark not defined.
Обзор способов постраничной выборки Error! Bookmark not defined.
Тестирование способов постраничной выборки.. Error! Bookmark not
defined.
4
Выводы ...................................................... Error! Bookmark not defined.
SQL и модульное тестирование .................. Error! Bookmark not defined.
Место модульного тестирования в системе испытаний ................Error!
Bookmark not defined.
Особенности разработки на процедурных расширениях SQL .....Error!
Bookmark not defined.
Пример задачи для модульного теста..... Error! Bookmark not defined.
Создаём специализированный макроязык ............ Error! Bookmark not
defined.
Остановиться и оглянуться ..................... Error! Bookmark not defined.
Производительность SQL-запросов ........... Error! Bookmark not defined.
Общие рекомендации............................... Error! Bookmark not defined.
Анализ плана выполнения запроса ........ Error! Bookmark not defined.
Поиск узких мест ......................................... Error! Bookmark not defined.
Основы нагрузочного тестирования........... Error! Bookmark not defined.
Инструменты и методы............................ Error! Bookmark not defined.
Учёт степени параллелизма .................... Error! Bookmark not defined.
SQL Server и MongoDB на простом тесте .. Error! Bookmark not defined.
Тест вставки записей ............................... Error! Bookmark not defined.
Запросы и хронометраж .......................... Error! Bookmark not defined.
Выводы ...................................................... Error! Bookmark not defined.
Тестовые и демонстрационные базы данных ........... Error! Bookmark not
defined.
Заключение ....................................................... Error! Bookmark not defined.
Литература ........................................................ Error! Bookmark not defined.
5
Введение
Разработка приложений баз данных распространена не только в
«корпоративном секторе» автоматизации производственных процессов
предприятий и их отделов. Из классического определения «программы —
это алгоритмы плюс данные» следует, что сколь верёвочке не виться,
пройдя через цепочку служб, запрос в итоге обрабатывается системой
управления базами данных (СУБД) или её неполнофункциональным
аналогом. Активно развивающийся рынок мобильных устройств широко
использует встраиваемые (embedded) СУБД, ранее применявшиеся в
основном для управления оборудованием.
Если программист сознательно не ограничивает себя разработкой служб
и человеко-машинных интерфейсов, взаимодействующих исключительно с
другими службами, то вскоре возникает необходимость непосредственной
работы с какой-либо СУБД, вероятнее всего реляционной.
Как правило, обладателям профильного образования преподаватели
читали соответствующий теоретический курс в вузе [2], сопровождаемый
практическими занятиями, пересекающийся по тематике с другими
предметами. И, тем не менее, приступая к производственным задачам,
вчерашний студент быстро ощутит отличие академических подходов от
открывающегося взгляду пейзажа строек в недрах корпоративного
софтостроения или в глубоком тылу веб-служб.
Тяжелее пришедшим в программирование из других областей
деятельности. Окунувшись в реальность без багажа теории,
соответствующего, как говорят американцы, бэкграунда, трудно
сформировать в голове целостную картину, охватывающую важные детали
происходящего, пропуская несущественные. Не хватает ни времени, ни
мотивации читать достаточно скучные, толстые монографии вроде
многократно переизданного Дейта [1], когда надо решать текущие задачи.
Программисту становится не до вопросов философии кунг-фу, освоить бы
побыстрее основные удары и блоки, чтобы получать поменьше оплеух от
брыкающейся
техники,
исполненных
значимости
системных
администраторов и недовольного начальства. Хорошо, если удастся
выкроить часок-другой и потренироваться в сиквеле1 на примерах из
книжки Грабера [3]...
1
Сиквелом на жаргоне программистов называется язык SQL (Structured Query
Language). Первоначальная его версия так и называлась SEQUEL. Впрочем, если вы
будете говорить просто «эс-ку-эль», это не повлияет на ваш профессионализм.
6
Справиться с растущим потоком информации, не пропуская её через
фильтры теоретического багажа, становится всё труднее. Например,
последние годы активно пропагандируют NoSQL, может быть там все
будет проще, не надо задумываться о нормальных формах и тренировать
мозги на непривычную множественную обработку? Или может быть
лучше работать через проекцию таблиц на объекты и не использовать
прямой доступ к базе данных?
Книга «Софтостроение изнутри» [13] посвятила немалое количество
сюжетов теме «как это не надо делать» и прогрессирующей в среде
программистов некомпетентности в области баз данных, приводящей к
катастрофическим для проектов последствиям на более поздних стадиях.
В отличие от предтечи, настоящее издание будет носить ровно
противоположный характер, следуя принципу «как это лучше сделать».
Опираясь на опыт работы в продуктовом софтостроении и в технической
экспертизе СУБД-решений, автор постарается в рамках повествования
помочь вам не утонуть в информационном потоке и разобраться в часто
возникающих на практике проблемах, не отрывая их от теории.
Почему не блог, а книга? Действительно, в Сети можно найти немало
интересных статей. Однако, во-первых, чтобы найти нужную информацию
по правильно заданным ключевым словам, а, во-вторых, оценить
достоверность найденной публикации, нужно уже иметь определённый
уровень компетенции, который кроме как чтением книг и практикой не
поднять. Поэтому рекомендую и начинающим, и программистам с
небольшим (2-3 года) опытом не увлекаться малоосмысленным
копированием кода со страниц в Сети и прочим натягиванием глобуса на
Меркаторову проекцию.
Цель книги не в том, чтобы заменить чтение упомянутых выше
монографий или других книг из прилагаемого списка литературы, но
подготовить и подвести к нему осознанно, исходя из нужд решения
практических
задач.
Попытаться
выстроить
мост
между
бескомпромиссным академическим гранитом и производственными
зыбучими песками, бесследно засасывающих неосмотрительных путников
своими половинчатыми решениями и постоянной текучкой.
Все-таки, нет ничего практичнее, чем хорошая теория.
7
Download