RSS Telegram YouTube Apple Яндекс Spotify Google Amazon Почта

40. MVCC, nocodb, уольнения в IT

25.02.2024

Скачать

К списку выпусков

Ссылки выпуска:

Что такое MVCC (Multi-Version Concurrency Control)?

Концепция MVCC была сформулирована в 1981 году в статье "Concurrency Control in Distributed Database Systems" (Бернштейн, Гудман). PostgreSQL (c 1986 года до 1995, Ingres) был новатором в том, что реализовал этот механизм.

MVCC напрямую решает проблему Atomicity, Consistency и Isolation (из ACID) в транзакциях.

Readers never block writers and writers never block readers

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

Реализация MVCC предполагает накапливание изменений в виде версий данных. Таким образом, каждая запись в таблице может иметь несколько версий. INSERT добавляет запись. DELETE помечает запись как удаленную. UPDATE - это комбинация DELETE + INSERT. Таким образом, следует учитывать, что обновление данных с высокой частотой может замедлять производительность и увеличивать объем данных. Например, были ли какой-то пользователь онлайн или нет лучше хранить в быстром key-value хранилище. Особенно, если в таблице пользователя много колонок и они хранят объемные данные (при обновлении эти данные будут дублироваться в новой версии строки). Также, если мы делаем бэкап, то на время бэкапа нужно сохранять старые версии строк, которые были помечены как удаленные, а это также приводит к увеличению объема данных, т.к. физически строка не удаляется до окончания резервного копирования.

Благодаря версионированию строк мы получаем:

Но как PostgreSQL различает версию строки, с чем работать, а с чем нет? Для этого используется транзакционный идентификатор (XID). XID - это 32-битное число, которое уникально идентифицирует транзакцию. Каждая транзакция имеет свой XID. Когда транзакция начинается, она получает новый XID. В PostgreSQL часто префикс X обозначает транзакционные объекты.

При создании строки в таблице, PostgreSQL сохраняет в ней два значения: XMIN и XMAX. XMIN - это XID транзакции, которая создала строку. XMAX - это XID транзакции, которая удалила строку.

MVCC snapshot состоит из XID и текущих выполняемых транзакций. Мы сканируем строчки и отбрасываем те, у которых XMIN больше XID текущей транзакции. Также мы игнорируем строки, у которых XMIN хоть и меньше XID, но находится в списке выполняемых транзакций. Отбрасываются и строки, у которых XMAX меньше XID текущей транзакции.

Учитывая особенности MVCC, нужно понимать, что часто обновляемые таблицы лучше делать компактными, т.к. каждое обновление строки - это копирование предыдущей версии. Т.е. возможно стоит задуматься от нормализации или выделении объемных полей из часто обновляемой таблицы. Несмотря на богатые возможности PostgreSQL, под нагрузкой стоит сокращать размер транзакции, т.к. чем дольше выполняется каждая транзакция, тем дольше хранятся устаревшие версии строк. А чем больше строк, тем хуже общая производительность. Это же касается бэкапов. Наилучшее решение - это выполнение резервного копирования на реплике.

nocodb

Используя nocodb можно создать что-то вроде Excel файла с возможностью фильтрации, сортировки и группировки данных. А также с одновременным доступом нескольких пользователей. Это может быть удобно для небольших проектов, когда заранее известно, что кроме этого инструмента ничего не понадобится. Отойти от рельс nocodb очень сложно.

Массовые увольнения в IT-компаниях

В США в 2023 году было уволено 191 000 человек из IT-компаний. Увольнения продолжаются.

Лидеры по увольнениям в 2023 году:

Заметные цифры по увольнениям в IT-компаниях:

Илон Маск с нашумевшим увольнением работников из компании Twitter/X был не в числе первых: до него уже начали практиковать массовые увольнения. Тут Илон скорее заложник своей популярности. До Илона в Coinbase было уволено 18% сотрудников (лето 2022), Stripe 14% (~1050), Lyft 15% (~760), Peloton 70% (~5600), Twilio 32% (~2600), Shopify 30% (~3300) и т.д. К примеру, Snapchat уволил почти 2000 сотрудников из 6000.

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

Не доверяйте свои секреты Snapchat. Если вы хотите действительно безопасный канал коммуникации, то рассмотрите SimpleX Chat.