Этот коммит содержится в:
Ihar Hancharenka 2024-05-07 10:20:50 +03:00
родитель 93ef345dce
Коммит a20f881130
7 изменённых файлов: 74 добавлений и 0 удалений

2
db/sql/features/ds/trees.txt Обычный файл
Просмотреть файл

@ -0,0 +1,2 @@
2024
https://habr.com/ru/articles/812601/

Просмотреть файл

@ -1,3 +1,8 @@
https://habr.com/ru/hubs/desktops/articles/
https://habr.com/ru/search/?target_type=posts&order=relevance&q=[%D0%BC%D0%B8%D0%BD%D0%B8+%D0%9F%D0%9A]
2024
https://habr.com/ru/companies/selectel/articles/811993/
2023
https://habr.com/ru/companies/selectel/articles/761916/
https://habr.com/ru/companies/selectel/articles/706602/

Просмотреть файл

@ -1,4 +1,5 @@
https://www.geekom.ru/geekom-mini-it13-mini-pc/
2024
https://habr.com/ru/articles/801837/
https://www.youtube.com/watch?v=jxaRguIK4h0

2
hw/garden/strawberry.txt Обычный файл
Просмотреть файл

@ -0,0 +1,2 @@
2024
https://habr.com/ru/articles/812533/

Просмотреть файл

@ -289,3 +289,62 @@ WHERE age > 30;
✅ В целом, хотя разработчик может влиять на выбор метода выполнения запросов в PostgreSQL, чаще всего лучшие результаты достигаются путем оптимизации структуры данных и индексов, а также написанием эффективных запросов, а не явным указанием определенных методов выполнения запросов.
*****************************************
🔬 Правила видимости строк в PostgreSQL.
В этом посте рассмотрим на основании чего PostgreSQL принимает решения какая строка является видимой для транзакций, а какая является устаревшей.
Если описать механизм MVCC в PostgreSQL по-простому, то он работает примерно так:
1⃣ Есть у нас в базе строка со значением А. Пользователь меняет ее значение А на Б (операция UPDATE);
2⃣ PostgreSQL под капотом фактически не обновляет данные в строке, а вставляет новую строку со значением Б, а старую строку со значением А помечает как устаревшую. Таким образом у нас получается две версии одной строки;
3⃣ Потом приходит AUTOVACUUM в таблицу и удаляет старую версию строки со значением А, чтобы освободить место для новых строк.
Это, конечно, сильно упрощенный пример, но примерно так и работает MVCC в PostgreSQL. Важно помнить, что любая операция UPDATE в PostgreSQL, это фактически вставка новой строки и пометка старой строки неактуальной.
В PostgreSQL есть ряд механизмов и индикаторов , которые помогают ей разобраться с актуальностью версий строк. А именно:
✅ Transaction ID;
✅ xmin;
✅ xmax;
✅ CLOG (Commit Log);
✅ cid;
✅ transaction snapshot;
✅ hintbit.
Рассмотрим кратко каждый из них.
📌 Transaction ID
Здесь все просто: каждая транзакция в PostgreSQL имеет свой номер (txid). Это 32-битное целое число без знака, позволяющее использовать примерно 4,2 миллиарда идентификаторов транзакций.
📌 xmin
Это значение находится в заголовке каждой строки и содержит ID транзакции, которая вставила данную конкретную строку. В нашем примере выше, это строка со значением А.
📌 xmax
Это значение тоже находится в заголовке каждой строки и содержит ID транзакции, которая удалила данную конкретную версию строки. Если транзакция завершилась успешно (COMMIT), то это значение сигнал для PostgreSQL, что данная версия строки является устаревшей. В нашем примере, xmax появится у строки со значением А, а у новой строки появится xmin с номером транзакции, которая ее вставила (сделала UPDATE).
📌 CLOG (Commit Log)
CLOG (Журнал фиксации), о нем мы более подробно уже говорили (https://t.me/pg_guru/611).
CLOG — это структура данных, хранящаяся в общей памяти и сохраняющаяся в каталоге $PGDATA/pg_xact. Целью CLOG является запись статуса транзакций.
📌 cid
Идентификатор команды внутри транзакции. Также имеет свои системные поля cmin и cmax. Cmin - идентификатор команды, которая вставила строку внутри текущей транзакции, cmax - индентификатор команды, которая удалила строку внутри транзакции. Cid используется в основном для определения видимости строки внутри работающей транзакции. В общем, смысл такой же как для идентификаторов xmin и xmax, только внутри транзакции.
📌 Transaction snapshot
В PostgreSQL используется изоляция транзакций на основе снимков. Каждая транзакция делает свой снимок данных и работает только с ним. Какая версия строки попадет в снимок определяется на основании значений полей xmin и xmax. Если очень сильно упростить, то в снимке видны изменения сделанные транзакцией xmin и не видны изменения, сделанные транзакцией xmax. Т.е. видны те версии строк, которые уже появились в базе, но еще не удалились.
📌 hintbit
Бит, помечающий строку как созданную или удаленную завершившейся или откатившейся транзакцией. Без этого бита PostgreSQL пришлось бы заглядывать в CLOG каждый раз для проверки статуса транзакции, что было бы довольно дорого с точки зрения производительности. Фактически это служебная информация, позволяющая увеличить производительность PostgreSQL.
Это краткое описание механизмов PostgreSQL, которые отвечают за видимость строк в PostgreSQL. Конечно, сами правила видимости гораздо сложнее, в чем можно убедиться, заглянув в исходный код PostgreSQL. Там будет куча различных проверок и обработок различных исключительных ситуаций. Но для общего понимания особенностей работы MVCC в PostgreSQL информации в посте вполне достаточно 😉
*****************************************

Просмотреть файл

@ -0,0 +1,3 @@
2024
https://dev.to/somadevtoo/10-must-know-system-design-concepts-for-interviews-2fii
https://habr.com/ru/companies/bothub/articles/812265/

Просмотреть файл

@ -1,5 +1,7 @@
https://www.anthropic.com/index/claude-2
2024
https://habr.com/ru/companies/bothub/articles/812659/
2023
https://techcrunch.com/2023/07/11/anthropic-releases-claude-2-the-second-generation-of-its-ai-chatbot/
https://3dnews.ru/1089788/anthropic-predstavila-v-svobodnom-dostupe-claude-2-drugelyubnogo-chatbota-s-iskusstvennim-intellektom