Алгоритмы плюс структуры данных (рецензия на "СУБД для программиста")

Сергей Тарасов, может быть известен вам по книге «Дефрагментация мозга. Софтостроение изнутри», которая была посвящена подходам, тенденциям и проблемам объектно-ориентированного программирования корпоративных информационных систем. Теперь же автор обратил внимание на такую актуальную тему, как работа с базами данных, и отразил свой опыт в книге «СУБД для программиста. Базы данных изнутри», что вполне закономерно: как написано во введении, по классическому определению Никлауса Вирта «программы – это алгоритмы плюс структуры данных». Вопросам организации данных и методам работы с ними и посвящена данная книга. Она является учебным пособием, объясняющим основные концепции современных СУБД, а также содержит примеры задач, которые могут встретиться начинающему (и не только) программисту при работе с базами данных. Рассматриваемые задачи, как и в предыдущей книге автора, по большей части касаются корпоративных информационных систем.

Плюсами книги является ее практическая направленность, а так же энциклопедичность. Уделяется внимание таким современным базам данных, как Microsoft SQL Server, Oracle, Firebird, PostgreSQL, MySQL а так же NoSQL и MongoDB. Так же рассматриваются модели организации данных с помощью широко используемой спецификации XML. Редко можно встретить книгу, где так отражена информация по различным БД, и, думаю, такой подход поможет в развитии у читателя навыков системного мышления. Книгу можно порекомендовать и как учебник для студентов специальностей в области информационных технологий. Например, Тамбовский государственный технический университет предлагает ее в перечне основной рекомендуемой литературы для подготовки к государственному экзамену по модулю «Базы данных».

Затрагиваемые в книге темы довольно широки. Описываются и базовые вопросы, такие как основные архитектуры и модели данных, используемые при проектировании приложений, нормальные формы и способы денормализации «звезда»/«снежинка», типы соединений таблиц, уровни чтения данных, блокировки. Разбираются и более продвинутые темы, такие как оптимизация запросов, организация модульного и нагрузочного тестирования приложений (unit testing/load testing), особенности использования NoSQL-СУБД, работа с XML и JSON, многомерные модели данных. Уделено внимание проектированию физического хранения данных, и организации системы хранения исходного кода. Отдельная глава посвящена объектной модели и объектно-реляционной проекции, которая часто используется при разработке приложений на Java и C#.

Рассматриваются решения таких типовых задач, как реализация деревьев, работа с хронологическими данными, поддержка нескольких языков в приложении, аудит объектов, загрузка больших объемов данных, использование неполно структурированных данных в реляционных СУБД, и других. В зависимости от условий решаемой задачи, даются рекомендации в выборе той или иной технологии, показываются плюсы и минусы различных реализаций. Для большинства задач приведен исходный код на том или ином диалекте SQL. Справедливости ради стоит заметить, что, все-таки, большинство приведенных задач реализовано на диалекте Transact SQL, а рассматриваемые темы обычно иллюстрируются на примере СУБД Microsoft SQL Server. Видимо, автор имеет больший опыт работы с данной СУБД, чем с другими.

Книга написана живым языком, в ней приводятся интересные исторические факты, например, история появления реляционной модели данных, откуда пришел в СУБД термин «транзакция», истоки популярного сейчас термина «большие данные» (big data), пример советской СУБД, реализующей сетевую модель данных, или описание высоконагруженной распределенной системы, использовавшейся, опять же, еще во времена СССР.

Из минусов можно выделить то, что местами книга напоминает сборник статей на различные темы, связанные с СУБД; и, как упоминалось выше, в ней уделяется больше внимания СУБД Microsoft SQL Server, почти не затрагивая особенностей таких широко используемых корпоративных СУБД, как Oracle или IBM DB2. Например, в СУБД Oracle уже есть встроенные средства для работы с иерархическими структурами (деревьями), и удобнее использовать их вместо приведенных общих алгоритмов. Так же реализованы в СУБД Oracle и средства аудита, реестра объектов метаданных (словарь данных), безопасности и разделения доступа к данным, и т.д. Следует понимать, что данная книга не заменяет документации или специализированных книг, целиком посвященной какой-то конкретной СУБД, с ее тонкостями и детальным описанием возможностей. При работе с определенной СУБД необходимо изучать литературу, посвященную именно ей.

Хотелось бы увидеть продолжение книги, где был бы сделан уклон на выбор систем для задач аналитики: организацию хранилищ данных для предприятий, описание современных поколоночных (column-oriented) баз данных (Vertica, GreenPlum, …), рассмотрение аппаратно-программных комплексов для обработки и анализа данных, таких как Teradata или Exadata. Можно более подробно коснуться технологий big data и NoSQL, рассказать о реальных задачах бизнеса, в решении которых данные технологии помогают, более подробно объяснить их основополагающие концепции, например, алгоритмы MapReduce. Можно так же уделить внимание методам интеллектуального анализа данных (Data Mining), и визуализации данных.

В заключении хочу сказать, что рад появлению еще одной книги на тему баз данных от российского автора - таких книг не много, и обычно на полках магазинов мы можем встретить переводы трудов зарубежных специалистов. Поэтому выход каждой такой книги можно считать событием.

Андрей Кремер, консультант, специалист в области интеграции (профиль в Facebook)