From a20f881130a7845f86b925814b141e251fa947f3 Mon Sep 17 00:00:00 2001 From: Ihar Hancharenka Date: Tue, 7 May 2024 10:20:50 +0300 Subject: [PATCH] m --- db/sql/features/ds/trees.txt | 2 + hw/comp/mini/docs/articles.txt | 5 ++ hw/comp/mini/geekom.txt | 1 + hw/garden/strawberry.txt | 2 + pages/pg.txt | 59 +++++++++++++++++++ .../architecture/system-design/articles.txt | 3 + .../anthropic/{claude2.txt => claude.txt} | 2 + 7 files changed, 74 insertions(+) create mode 100644 db/sql/features/ds/trees.txt create mode 100644 hw/garden/strawberry.txt create mode 100644 pl/cross/methodologies/architecture/system-design/articles.txt rename science/ai/hosted/anthropic/{claude2.txt => claude.txt} (84%) diff --git a/db/sql/features/ds/trees.txt b/db/sql/features/ds/trees.txt new file mode 100644 index 000000000..3501f38ba --- /dev/null +++ b/db/sql/features/ds/trees.txt @@ -0,0 +1,2 @@ +2024 +https://habr.com/ru/articles/812601/ diff --git a/hw/comp/mini/docs/articles.txt b/hw/comp/mini/docs/articles.txt index c41e96b41..5679844a4 100644 --- a/hw/comp/mini/docs/articles.txt +++ b/hw/comp/mini/docs/articles.txt @@ -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/ diff --git a/hw/comp/mini/geekom.txt b/hw/comp/mini/geekom.txt index 9e4763721..3f31885b2 100644 --- a/hw/comp/mini/geekom.txt +++ b/hw/comp/mini/geekom.txt @@ -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 diff --git a/hw/garden/strawberry.txt b/hw/garden/strawberry.txt new file mode 100644 index 000000000..84adcb4af --- /dev/null +++ b/hw/garden/strawberry.txt @@ -0,0 +1,2 @@ +2024 +https://habr.com/ru/articles/812533/ diff --git a/pages/pg.txt b/pages/pg.txt index 98a2ae8b9..077f496e0 100644 --- a/pages/pg.txt +++ b/pages/pg.txt @@ -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 информации в посте вполне достаточно 😉 + +***************************************** diff --git a/pl/cross/methodologies/architecture/system-design/articles.txt b/pl/cross/methodologies/architecture/system-design/articles.txt new file mode 100644 index 000000000..51e18df7b --- /dev/null +++ b/pl/cross/methodologies/architecture/system-design/articles.txt @@ -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/ diff --git a/science/ai/hosted/anthropic/claude2.txt b/science/ai/hosted/anthropic/claude.txt similarity index 84% rename from science/ai/hosted/anthropic/claude2.txt rename to science/ai/hosted/anthropic/claude.txt index dad24427b..94516a5db 100644 --- a/science/ai/hosted/anthropic/claude2.txt +++ b/science/ai/hosted/anthropic/claude.txt @@ -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