Рецензии на прочитанные книги: 29-ый десяток
14 августа 2023
Прочитать очередной десяток книг заняло больше времени, чем планировалось. Тем не менее, я справился. На этот раз я читал книги про СУБД и ретро-железо. Предыдущие рецензии доступны по тэгу «Литература».
PostgreSQL 14 изнутри
Егор Рогов
Книга о внутреннем устройстве PostgreSQL. Напоминает The Internals of PostgreSQL, только ориентированна не на разработчиков PostgreSQL, а на пользователей и DBA.
Мне особенно понравилась глава 4, в подробностях объясняющая, как работают снапшоты в PostgreSQL. Также есть главы, детально объясняющие устройство индексов Hash, B-Tree, GiST, SP-GiST, GIN и BRIN. Из книги вы узнаете о граничных случаях, в которых PostgreSQL ведет себя не как ACID-система, когда SELECT-запросы записывают данные на диск, что, вопреки названию, Index Only Scan в половине случаев все-таки ходит в кучу, как работает VACUUM и VACUUM FULL, как PostgreSQL хранит и использует статистику, и другие интересные вещи.
Книга просто супер, очень рекомендую. На момент написания этих строк уже появилась обновленная версия для PostgreSQL 15 и, вероятно, скоро появится для PostgreSQL 16. В электронном виде книга распространяется бесплатно. Также ее можно приобрести на бумаге в твердом переплете. Существует перевод на английский язык.
The Art of PostgreSQL, Second Edition
Dimitri Fontaine
Книга ориентирована на разработчиков приложений и показывает, как в ряде случаев сотни строк кода можно заменить одним простым и эффективным SQL-запросом. Будет особенно полезна тем, кто до сих пор использует РСУБД как слегка улучшенное key-value хранилище. Например, через ORM — в ущерб эффективности и согласованности данных.
Здесь вы найдете примеры использования LATERAL JOIN, хранимых процедур на PL/pgSQL, триггеров, NOTIFY и LISTEN, а также оконных функций. Много внимания уделяется правильному проектированию схемы базы данных. Дополнительно приводятся интервью с разными известными и не очень людьми (Markus Winand, Gregoire Hubert, Álvaro Hernandez Tortosa, …) на предмет что им нравится в PostgreSQL, чего не хватает, и так далее.
Следует учесть, что перечисленные темы затрагиваются лишь поверхностно. Например, оконным функциям посвящено ровно шесть страниц, большую часть из которых занимают результаты выполнения запросов. Партицирование таблиц и полнотекстовый поиск просто упоминаются, что они есть, а про наследование таблиц и вовсе было решено умолчать.
Также следует держать в уме, что автор описывает доступные возможности. Это не значит, что все эти возможности всегда нужно применять. Например, предложенные инструменты для тестирования SQL-кода я бы не использовал. Вместо них я бы выбрал dockertest или его аналог, если проект написан не на Go. Вместо hstore практически всегда лучше использовать JSONB. И уж точно я бы не стал писать хранимые процедуры на PL/XSLT.
«The Art of PostgreSQL» можно приобрести на сайте книги.
Database System Concepts, Seventh Edition
Abraham Silberschatz, Henry F. Korth, S. Sudarshan
Книга про базы данных. Начинается с простого — чем OLAP отличается от OLTP, что такое DDL, DML и ACID, какие бывают модели данных и чем так полезна именно реляционная модель, объясняется реляционная алгебра и язык SQL, как спроектировать схему базы данных (с ER-диаграммами, как учат в ВУЗах), как пользоваться хранимыми процедурами, триггерами, рекурсивными запросами, оконными функциями, JDBC и psycopg2, что такое data warehouse и ETL.
Но самое интересное начинается где-то с середины. Здесь рассказывается, как СУБД хранит данные на диске, как внутри устроены индексы, какие бывают алгоритмы JOIN’ов (nested loop join, merge join, hash join, …) и какова их стоимость, что такое halloween problem и аномалия write skew, как работает serializable snapshot isolation (SSI) и ARIES. В книгу также вошли материалы по распределенным системам. В частности, здесь вы найдете разбор Paxos, Raft и Merkle trees.
Шесть глав распространяются бесплатно онлайн. Из них наибольшую ценность представляет глава 32, посвященная PostgreSQL. В ней приводится общее описание PostgreSQL, рассказывается, как собрать его из исходников, что где лежит в исходном коде, что такое Datum, какова местная специфика управления памятью и обработки ошибок, как добавить новый узел (Node) плана выполнения запросов, какие бывают виды кортежей в PostgreSQL, зачем нужен TupleTableSlot, и подобного рода вещи.
В конце каждой главы даются вопросы для самоконтроля и упражнения, а также приводятся ссылки на дополнительные материалы. Параллельно с чтением «Database System Concepts» я смотрел онлайн-курс CMU 15-445/645 Intro to Database Systems (Fall 2021), во многом опирающийся на эту книгу. Выложены как слайды, так и видео. Некоторые вещи объясняются в курсе более доступно.
Книга хорошая. Только, субъективно, ее следовало разбить на две, а то и на три. Одну про то, как пользоваться СУБД, вторую про внутреннее устройство СУБД, и третью про распределенные системы.
PostgreSQL Configuration
Baji Shaik
Небольшая книжка 2020-го года, посвященная установке, настройке и мониторингу PostgreSQL. Под настройкой понимается не только тюнинг параметров postgresql.conf, но и настройка резервного копирования, ACL, репликации и пулера соединений. Во всяком случае, так заявлено.
В действительности, книга представляет собой неполный и неточный пересказ документации, плюс пары дополнительных онлайн-ресурсов. Тема настройки репликации, на мой взгляд, раскрыта слабо. Автор сообщает, что в PostgreSQL есть потоковая репликация, после чего быстро переходит к настройке автофейловера на основе repmgr. Что репликация бывает двух видов — физической и логической, каковы особенности их работы и области применения, не сообщается.
«PostgreSQL Configuration» можно рекомендовать DBA, имеющим опыт работы с условным Oracle, но впервые столкнувшимся с PostgreSQL. Книга позволяет составить общее представление, что тут вообще происходит. Но детали придется искать в других источниках.
PostgreSQL Query Optimization
Henrietta Dombrovskaya, Boris Novikov, Anna Bailliekova
Книга 2021-го года об оптимизации запросов. Как читать планы выполнения запросов, как работает B+tree, какие бывают типы JOIN’ов, про функциональные индексы, частичные индексы, bitmap scans, нормализацию схемы базы данных, программирование на PL/pgSQL, и всякое такое прочее.
Материал довольно базовый. Про полнотекстовый поиск, пространственный поиск и BRIN-индексы говорится лишь то, что они есть. Такие продвинутые темы, как, например, автоматическое обновление представлений на триггерах, или переписывание горячего кода на языке Си, не рассматриваются.
Книгу можно рекомендовать начинающим пользователям PostgreSQL.
The IoT Hacker’s Handbook
Aditya Gupta
Книга о безопасности IoT. Датирована 2019-м годом, имеет объем около 300 страниц.
Здесь описывается история появления IoT и объясняются основы реверс-инженеринга железа. Например, как вскрыть корпус, опознать основные компоненты, найти шины UART, I2C или SPI, как сдампить SPI flash, как пользоваться Radare2, и так далее. Мне было особенно интересно почитать про JTAG, а также поиск его пинов при помощи Arduino с прошивкой JTAGenum. Просто так получилось, что JTAG я никогда не пользовался. Отдельные главы посвящены безопасности Android- и веб-приложений, использованию SDR на примере HackRF, RTL-SDR, Gqrx и GNU Radio, а также взлому BLE-устройств при помощи сниффера Ubertooth.
Книгу можно охарактеризовать, как конспект самого главного, что нужно знать ковырятелю встраиваемых систем. Написана простым и понятным языком. Материал базовый, без особых откровений, зато отлично подойдет начинающим.
Микро-ЭВМ БК-0010. Архитектура и программирование на языке ассемблера
Зальцман Ю.А.
Серия статей о программировании на ассемблере под БК-0010(-01). Изначально опубликована в журнале «Персональный компьютер БК-0010, БК-0011М» номера 1-5 за 1994 год, а также 1-3 за 1995 год. В наши дни распространяется, как бесплатная книга.
Книга ориентирована на начинающих программистов, изучающих ассемблер после BASIC. Поэтому сначала приводится подробное объяснение того, как десятичные числа переводятся в двоичные и обратно, что такое дополненное представление знаковых чисел, и так далее. Затем дается много теории касаемо архитектуры машины, регистров и прерываний. Примеры начинаются только после прочтения где-то 1/4 материала. Я бы предпочел, чтобы примеры давались параллельно с углублением в технические дебри, но это субъективно.
В книге есть вообще все, включая описание изначально недокументированного таймера, инструкцию по написанию собственного отладчика, а также эмулятора несуществующих в К1801ВМ1 команд через соответствующее прерывание. Рассказывается, как программно изменить цвет фона или сделать его полосатым. Приводится код подпрограммы, печатающей текущее содержимое экрана на принтере МС 6312.
Плюс к этому, в книге приводится довольно подробный разбор принципиальной схемы БК-0010(-01) с объяснением, какие компоненты что делают. Приводится обзор существующих модификаций БК с комментариями автора на предмет того, какие из них стоит применять, а какие не стоит. Рассказывается, что нужно для того, чтобы подменить встроенную ПЗУ на собственную, например, на ПЗУ с ультрафиолетовым стиранием К573РФЗ или ПЗУ с электрическим стиранием КМ1801РР1. Приводится цоколевка разъемов УП и МПИ. Дается инструкция по подключению контроллера гибкого диска (КНГМД).
Считается лучшей книгой про БК-0010(-01) из написанных, и небезосновательно.
Простейшая микро-ЭВМ
Л. Н. Буреев, А. Л. Дудко, В. Н. Захаров
Книга 1989-го года о том, как сделать простой компьютер в стиле УМК-80 на базе микропроцессора КР580ИК80А, аналога Intel 8080.
Представляет собой что-то вроде принципиальной схемы с развернутыми комментариями по каждому узлу. Помимо разбора схемы дательно объясняется работа отдельных микросхем, а также программирование под 8080 — как на ассемблере, так и в машинных кодах. Радует глаз обилие цветных иллюстраций.
Особое внимание уделено сборке компьютера и тестированию устройства один узел за другим. Например, тому, как проверить микропроцессор без ОЗУ и ПЗУ. А вот вопрос о программировании ПЗУ почему-то был оставлен в стороне. Приводится код программы-монитора и предполагается, что она как-то сама окажется в ПЗУ. В общих чертах описываются возможные доработки, включая вывод информации на телевизор, подключение магнитофона и увеличение объема ОЗУ.
От самоделок на логических элементах до микро-ЭВМ
В. Г. Бартенев, Б. Е. Алгинин
Книга 1993-го года. На обложке красуются Микроша и несколько вариантов компьютера ЮТ-88, в корпусе от калькулятора и без корпуса. О книге я узнал из статьи Как я собирал ЮТ-88 Алексея Морозова.
Первая часть книги посвящена относительно простым проектам, не исключая самодельного программатора ПЗУ на прожигаемых нихромовых перемычках К155РЕ3 (32 байта) и К556РТ4 (128 байт). Интересная особенность данных ПЗУ состоит в том, что не все они успешно программируется. Процент успешно программируемых ПЗУ называется коэффициент программирования и является частью спецификации на конкретный чип. К155РЕ3 и К556РТ4 имеют коэффициенты программирования 30% и 90% соответственно. Как ни странно, данные ПЗУ доступны и по сей день.
Вторая часть рассказывает о том, как собрать компьютер ЮТ-88. Он бывает в двух вариантах. В минимальном варианте ЮТ-88 качественно похож на УМК-80, только еще дополнительно может работать с магнитофоном. Этот вариант может быть помещен в корпус от настольного калькулятора Электроника МК-42 или подобного. В расширенном варианте компьютер имеет полноценную клавиатуру и подключается к дисплею. Книга описывает оба варианта.
ЮТ-88 во многом похож на РК-86. Ключевых отличия два. Во-первых, ЮТ-88 можно дорабатывать постепенно — сначала собрать базовую версию, затем добавить полноценную клавиатуру и вывод информации на дисплей, затем сделать модуль динамической ОЗУ, и в пределе запустить на всем этом дисковую операционную систему CP/M. Во-вторых, ЮТ-88 описан намного более подробно. Компьютер создавался не просто повторяемым, а повторяемым начинающими радиолюбителями.
Intel 8080 Assembly Language Programming Manual
Intel Corp
Мануал 1975-го года на 90 страниц от Intel. Во всех подробностях описывает, как программировать на ассемблере и/или в машинных кодах под процессор 8080. Характерно, что уже в 1975-м году в кросс-ассемблере 8080 имелась серьезная поддержка макросов. Для его использования требовалась машина с Фортраном.
Интересное отличие ассемблера 8080 от ассемблера x86/x64 заключается в наличии инструкций условного вызова подпрограммы, а также условного возврата из подпрограммы. Например, CZ (call if zero) и RZ (return if zero) соответственно.
Также интерес представляет инструкция RST. Она позволяет вызывать восемь подпрограмм, расположенных в младших 64-х байтах адресного пространства. Изначально инструкция предназначена для обработки прерываний, но ей можно найти и другое применение. За счет того, что инструкция однобайтовая, с ее помощью выгодно обращаться к часто используемым подпрограммам. Этим можно уменьшить размер программы.
Процессор 8080 поддерживает 78 инструкций и имеет 7 регистров. В самом деле, можно узнать абсолютно все о программировании под него, прочитав менее сотни страниц. Почему в современных процессорах x86/x64 никак не обойтись без ~1000 инструкций, остается великой загадкой.
В дополнение к названным книгам также были прочитаны руководства на УМК-80 и Микрошу. Насколько они считаются книгами — вопрос дискуссионный. Я решил посчитать их вместе с «Intel 8080 Assembly Language Programming Manual», как одну нормальную книгу.
Дополнение: Рецензии на прочитанные книги: 30-ый десяток
Метки: Литература.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.