Прочитать очередной десяток книг заняло больше времени, чем планировалось. Тем не менее, я справился. На этот раз я читал книги про СУБД и ретро-железо. Предыдущие рецензии доступны по тэгу «Литература» .
Егор Рогов
Книга о внутреннем устройстве 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. В электронном виде книга распространяется бесплатно . Также ее можно приобрести на бумаге в твердом переплете . Существует перевод на английский язык.
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» можно приобрести на сайте книги .
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) , во многом опирающийся на эту книгу. Выложены как слайды, так и видео. Некоторые вещи объясняются в курсе более доступно.
Книга хорошая. Только, субъективно, ее следовало разбить на две, а то и на три. Одну про то, как пользоваться СУБД, вторую про внутреннее устройство СУБД, и третью про распределенные системы.
Baji Shaik
Небольшая книжка 2020-го года, посвященная установке, настройке и мониторингу PostgreSQL. Под настройкой понимается не только тюнинг параметров postgresql.conf, но и настройка резервного копирования, ACL, репликации и пулера соединений . Во всяком случае, так заявлено.
В действительности, книга представляет собой неполный и неточный пересказ документации, плюс пары дополнительных онлайн-ресурсов. Тема настройки репликации, на мой взгляд, раскрыта слабо. Автор сообщает, что в PostgreSQL есть потоковая репликация, после чего быстро переходит к настройке автофейловера на основе repmgr . Что репликация бывает двух видов — физической и логической , каковы особенности их работы и области применения, не сообщается.
«PostgreSQL Configuration» можно рекомендовать DBA, имеющим опыт работы с условным Oracle, но впервые столкнувшимся с PostgreSQL. Книга позволяет составить общее представление, что тут вообще происходит. Но детали придется искать в других источниках.
Henrietta Dombrovskaya, Boris Novikov, Anna Bailliekova
Книга 2021-го года об оптимизации запросов. Как читать планы выполнения запросов, как работает B+tree, какие бывают типы JOIN’ов, про функциональные индексы, частичные индексы, bitmap scans , нормализацию схемы базы данных, программирование на PL/pgSQL , и всякое такое прочее.
Материал довольно базовый. Про полнотекстовый поиск , пространственный поиск и BRIN-индексы говорится лишь то, что они есть. Такие продвинутые темы, как, например, автоматическое обновление представлений на триггерах , или переписывание горячего кода на языке Си , не рассматриваются.
Книгу можно рекомендовать начинающим пользователям PostgreSQL.
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(-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 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-ый десяток