Алгоритми плюс структури даних (рецензія на "СУБД для програміста")
Сергій Тарасов, може бути відомий вам по книзі « Дефрагментація мозку. Софтостроеніе зсередини », Яка була присвячена підходам, тенденціям і проблемам об'єктно-орієнтованого програмування корпоративних інформаційних систем. Тепер же автор звернув увагу на таку актуальну тему, як робота з базами даних, і відбив свій досвід в книзі « СУБД для програміста. Бази даних зсередини », Що цілком закономірно: як написано у вступі, за класичним визначенням Ніклауса Вірта« програми - це алгоритми плюс структури даних ». Питанням організації даних і методів роботи з ними і присвячена дана книга. Вона є навчальним посібником, що пояснює основні концепції сучасних СУБД, а також містить приклади завдань, які можуть зустрітися початківцю (і не тільки) програмісту при роботі з базами даних. Розглянуті завдання, як і в попередній книзі автора, здебільшого стосуються корпоративних інформаційних систем.
Плюсами книги є її практична спрямованість, а так само енциклопедичність. Приділяється увага таким сучасним базам даних, як 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 )