Терміни
Тут зібрані 304 терміни курсу разом з англійськими відповідниками. Відповідники тут не для краси: документація, man-сторінки й повідомлення про помилки майже завжди англійською, і треба знати, що саме там шукати.
Пояснення навмисно короткі, на одне речення. Це нагадування для того, хто модуль уже читав, а не заміна йому — за подробицями йдіть за посиланням на модуль.
Нічого не знайшлося. Спробуйте англійський відповідник або частину слова.
I. Реляційна модель і SQL
- СУБД— DBMS (database management system)
- Програма, що бере на себе зберігання даних, одночасний доступ до них, відновлення після збою й відповіді на запити, щоб кожен застосунок не реалізовував це сам. модуль 1
- модель даних— data model
- Опис того, з чого складається одиниця зберігання (рядок, документ, вершина, вектор) і які операції над нею природні; від моделі залежить, які запити база виконує легко. модуль 1
- незалежність даних— data independence
- Властивість реляційної моделі, за якої програма описує, які дані їй потрібні, і не залежить від того, як вони розкладені на диску й які індекси є. модуль 1
- транзакція— transaction
- Група команд між BEGIN і COMMIT, яка комітиться цілком або не комітиться зовсім. Гарантії ізоляції між транзакціями розбирає модуль 10. модуль 1
- OLTP— OLTP (online transaction processing)
- Навантаження з тисяч коротких запитів на секунду, кожен з яких читає або змінює кілька рядків (оформити замовлення, списати залишок). модуль 1
- OLAP— OLAP (online analytical processing)
- Навантаження з рідкісних важких запитів, що читають мільйони рядків і підсумовують їх (виручка за місяцями, когорти покупців). модуль 1
- NoSQL— NoSQL
- Умовна назва баз даних, що з'явилися в кінці 2000-х для масштабування запису на багато вузлів і відмовилися від частини можливостей реляційних СУБД (JOIN, транзакцій на кілька записів). Не означає «без SQL». модуль 1
- NewSQL— NewSQL
- Умовна назва розподілених баз, що намагаються поєднати SQL і транзакції з серіалізованістю між вузлами з горизонтальним масштабуванням (Spanner, CockroachDB). модуль 1
- key-value база— key-value store
- База, де значення зберігається й читається за ключем, без запитів за вмістом значення (Redis, DynamoDB). модуль 1
- документна база— document database
- База, одиницею запису й читання якої є вкладений документ, зазвичай JSON або BSON (MongoDB). модуль 1
- wide-column база— wide-column store
- База, що розкладає рядки за ключем партиції по багатьох вузлах і дозволяє кожному рядку мати власний набір колонок (Cassandra, ScyllaDB). модуль 1
- графова база— graph database
- База, де дані подано вершинами й ребрами, а запити обходять зв'язки між ними (Neo4j). модуль 1
- колонкова база— columnar database
- База, що зберігає таблицю по колонках, а не по рядках; читає лише потрібні колонки, тому добре підходить для аналітики (DuckDB, ClickHouse). модуль 1
- векторна база— vector database
- База, що шукає найближчих сусідів за ембедингами (числовими векторами) замість пошуку за точним збігом (pgvector). модуль 1
- відношення— relation
- Математичний об'єкт реляційної моделі, що складається із заголовка (набір атрибутів з доменами) і тіла (множина кортежів). У SQL йому відповідає таблиця. модуль 2
- кортеж— tuple
- Один елемент відношення, набір значень по одному на кожен атрибут. У SQL це рядок. модуль 2
- атрибут— attribute
- Іменований компонент відношення, значення якого беруться зі свого домену. У SQL це колонка. модуль 2
- домен— domain
- Множина допустимих значень атрибута. У SQL його задають типом колонки та обмеженнями на нього. модуль 2
- потенційний ключ— candidate key
- Мінімальний набір атрибутів, значення якого різні в усіх кортежах відношення; з нього не можна прибрати жоден атрибут без втрати унікальності. модуль 2
- первинний ключ— primary key
- Потенційний ключ, обраний головним способом ідентифікації кортежу. У SQL його значення унікальні й не мають NULL. модуль 2
- зовнішній ключ— foreign key
- Атрибут або набір атрибутів, значення яких мусять збігатися зі значенням потенційного ключа іншого (або того самого) відношення. Порожнє значення перевірку пропускає. модуль 2
- сурогатний ключ— surrogate key
- Ключ без змісту в предметній області, який видає сама база, наприклад значення identity. Не змінюється, але унікальності предметної області не гарантує. модуль 2
- природний ключ— natural key
- Ключ, узятий з предметної області: артикул, код країни, податковий номер. Змінюється разом зі світом, тож його рідко роблять первинним. модуль 2
- обмеження цілісності— integrity constraint
- Правило, якому має відповідати кожен допустимий стан бази. СУБД відхиляє зміну, що його порушує. модуль 2
- NULL— NULL
- Позначка, що значення немає. Порівняння з нею дає unknown, навіть коли порівнюють NULL із NULL. модуль 2
- тризначна логіка— three-valued logic
- Логіка SQL з трьома значеннями істинності: true, false і unknown. WHERE, ON і HAVING пропускають лише true, CHECK відхиляє лише false. модуль 2
- реляційна алгебра— relational algebra
- Набір операцій над відношеннями (вибірка, проєкція, JOIN, об'єднання, різниця, перейменування), що повертають відношення. Теоретична основа SQL і планувальника запитів. модуль 2
- проєкція— projection
- Операція алгебри, що лишає з відношення вибрані атрибути й прибирає повтори. У SQL це список у SELECT разом з DISTINCT. модуль 2
- мультимножина— bag (multiset)
- Набір елементів, у якому той самий елемент може траплятися кілька разів. Результат SQL-запиту є мультимножиною, а відношення моделі множиною. модуль 2
- логічний порядок виконання— logical query processing order
- Послідовність кроків, якою стандарт SQL визначає результат SELECT (FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT); від неї залежить, де видно псевдоніми й віконні функції. модуль 3
- OUTER JOIN— outer join
- JOIN (LEFT, RIGHT або FULL), який зберігає рядки однієї чи обох таблиць без пари й заповнює відсутні колонки значеннями NULL. модуль 3
- CROSS JOIN— cross join
- JOIN без умови (CROSS JOIN), що повертає всі пари рядків двох таблиць, тобто їх декартів добуток. модуль 3
- розмноження рядків— fan-out
- Повторення рядка однієї таблиці в результаті JOIN стільки разів, скільки йому відповідає рядків другої таблиці; через нього суми й лічильники виходять завищеними. модуль 3
- агрегатна функція— aggregate function
- Функція, що згортає набір рядків до одного значення (count, sum, avg, min, max); майже всі агрегатні функції пропускають NULL, а count(*) рахує рядки. модуль 3
- підзапит— subquery
- Запит SELECT усередині іншого запиту, який повертає одне значення, список значень або таблицю. модуль 3
- корельований підзапит— correlated subquery
- Підзапит, що посилається на колонки зовнішнього запиту й тому логічно обчислюється для кожного зовнішнього рядка окремо. модуль 3
- semi-join— semi-join
- Перевірка «для рядка є хоча б одна пара в іншій таблиці» без розмноження рядків; у SQL її записують через EXISTS або IN. модуль 3
- anti-join— anti-join
- Вибір рядків, яким немає пари в іншій таблиці; у SQL його записують через NOT EXISTS або LEFT JOIN з перевіркою IS NULL. модуль 3
- CTE— common table expression (CTE)
- Іменований підзапит WITH name AS (...), винесений перед основним запитом; у PostgreSQL 12 і новіших його вбудовують в запит, якщо на нього посилаються один раз. модуль 3
- рекурсивний CTE— recursive CTE
- CTE, що складається з початкової частини й рекурсивної, яка повторно застосовується до рядків попереднього кроку, доки не дасть порожній результат; використовується для дерев і графів. модуль 3
- віконна функція— window function
- Функція з OVER, що обчислює значення по «вікну» пов'язаних рядків і не згортає їх, на відміну від агрегату з GROUP BY. модуль 3
- рамка вікна— window frame
- Підмножина рядків розділу вікна, по якій рахується віконна функція для поточного рядка; за замовчуванням з ORDER BY вона тягнеться від початку розділу до поточного рядка разом з його рівними за ключем. модуль 3
- LATERAL-підзапит— lateral subquery
- Підзапит у FROM з ключовим словом LATERAL, який виконується для кожного рядка таблиць ліворуч від нього й може на них посилатися; так розв'язують задачу «топ-N на групу». модуль 3
- мова визначення даних— data definition language (DDL)
- Підмножина SQL, яка створює, змінює й видаляє об'єкти схеми: таблиці, обмеження, індекси, представлення (`CREATE`, `ALTER`, `DROP`). модуль 4
- мова маніпулювання даними— data manipulation language (DML)
- Підмножина SQL, яка змінює вміст таблиць: `INSERT`, `UPDATE`, `DELETE`, `MERGE`. модуль 4
- число з плаваючою комою— floating-point number
- Двійковий наближений формат (`real`, `double precision`). Більшість десяткових дробів, зокрема 0.1, він зберігає з похибкою, яка накопичується в сумах, тому гроші в ньому не зберігають. модуль 4
- часова позначка з поясом— timestamp with time zone
- Тип `timestamptz`. Зберігає момент часу в UTC, а пояс застосовує на вході й виході за налаштуванням сесії; сам пояс у значенні не зберігається. модуль 4
- upsert— upsert
- Вставка, яка за конфлікту з наявним ключем оновлює рядок замість помилки; у PostgreSQL це `INSERT … ON CONFLICT`. Виконується однією атомарною командою. модуль 4
- представлення— view
- Збережений запит із ім'ям. Даних не зберігає: під час звернення підставляється в запит, тому завжди показує свіжі дані. модуль 4
- матеріалізоване представлення— materialized view
- Представлення, результат якого збережено як таблицю й оновлюється командою `REFRESH MATERIALIZED VIEW`, а не під час кожного звернення. модуль 4
- обчислювана колонка— generated column
- Колонка, значення якої обчислюється з інших колонок того ж рядка. Записати в неї значення не можна. Віртуальна обчислюється під час читання, збережена (`STORED`) під час запису. модуль 4
- блокування таблиці— table-level lock
- Блокування всієї таблиці в одному з восьми режимів, від `ACCESS SHARE` до `ACCESS EXCLUSIVE`. Тримається до кінця транзакції; режими, що конфліктують, чекають у черзі. модуль 4
- черга блокувань— lock queue
- Порядок, у якому запити чекають на блокування. Запит, що чекає несумісного режиму, блокує й тих, хто прийшов після нього, навіть якщо вони не конфліктують із поточним власником. модуль 4
- міграція схеми— schema migration
- Версійована зміна структури бази (DDL і, за потреби, даних), яку застосовують до працюючої бази відтворюваним скриптом. модуль 4
- обмеження `NOT VALID`— NOT VALID constraint
- `CHECK` чи зовнішній ключ, додані без перевірки наявних рядків. Діє на нові й змінені рядки одразу; старі перевіряє пізніше `VALIDATE CONSTRAINT` з послабленим блокуванням. модуль 4
- переписування таблиці— table rewrite
- Створення нового файлу таблиці з усіма рядками, яке вимагає деяких змін схеми (наприклад, `integer` → `bigint`). Триває пропорційно розміру таблиці, зазвичай під `ACCESS EXCLUSIVE`. модуль 4
- недійсний індекс— invalid index
- Індекс, який лишився після невдалого `CREATE INDEX CONCURRENTLY`. Кожен запис його оновлює, а запити ним не користуються; його видаляють і будують заново. модуль 4
- розширити, мігрувати, звузити— expand/contract
- Схема зміни без простою: додати нове поряд зі старим (розширити), перенести дані порціями (мігрувати), перемкнути застосунок і прибрати старе (звузити). Кожен крок сумісний з обома версіями застосунку. модуль 4
- сутність— entity
- Тип об'єктів предметної області з власною ідентичністю: покупець, замовлення, товар. На ER-діаграмі її малюють прямокутником, у схемі їй зазвичай відповідає таблиця. модуль 5
- ER-діаграма— entity-relationship diagram
- Схема сутностей і зв'язків між ними, з якої починають проєктування бази. Нотація Чена позначає зв'язки ромбами, а crow's foot кодує кардинальність і обов'язковість на кінцях ліній. модуль 5
- кардинальність зв'язку— cardinality
- Скільки об'єктів однієї сутності може відповідати об'єкту іншої: один до одного, один до багатьох чи багато до багатьох. Обов'язковість зв'язку (нуль чи хоча б один) задають окремо. модуль 5
- проміжна таблиця— junction table
- Таблиця, що розкладає зв'язок «багато до багатьох» на два зв'язки «один до багатьох». Містить зовнішні ключі на обидві сторони й атрибути самого зв'язку, як `order_items` між замовленнями й товарами. модуль 5
- суперключ— superkey
- Будь-який набір колонок, що визначає всі інші колонки таблиці. Потенційний ключ є мінімальним суперключем. модуль 5
- функціональна залежність— functional dependency
- Твердження `X → Y`: два рядки з однаковим `X` завжди мають однакове `Y`. Це властивість предметної області; дані можуть її спростувати, але не довести. модуль 5
- нормальна форма— normal form
- Умова на функціональні залежності таблиці, що виключає певний клас аномалій: 1НФ, 2НФ, 3НФ, НФБК, 4НФ. Форми впорядковано за силою: кожна наступна (до НФБК) включає вимоги попередньої. модуль 5
- нормалізація— normalization
- Розкладання таблиці на менші за її функціональними залежностями, щоб кожен факт зберігався в одному місці. Розклад має бути без втрат: `JOIN` частин повертає початкову таблицю. модуль 5
- аномалія оновлення— update anomaly
- Суперечність у даних, що виникає, коли один факт повторено в багатьох рядках і змінено не в усіх. Аналогічно аномалії вставки (факт не записати без стороннього) і видалення (разом із рядком зникає сторонній факт). модуль 5
- багатозначна залежність— multivalued dependency
- Залежність, коли ключу відповідає цілий набір значень однієї колонки, незалежний від іншого набору при тому самому ключі. Її усуває 4НФ. модуль 5
- денормалізація— denormalization
- Свідоме повторення даних заради швидшого читання. Виправдана, коли повторюване значення можна перерахувати з решти даних і є механізм, що тримає його правильним. модуль 5
- EAV— entity-attribute-value (EAV)
- Антипатерн: атрибути зберігають не колонками, а рядками `(сутність, назва, значення)`. Типи, обмеження й зовнішні ключі для таких значень недоступні. модуль 5
- поліморфний зв'язок— polymorphic association
- Антипатерн: посилання на кілька таблиць через пару `(тип, ідентифікатор)`. Зовнішній ключ не може вказувати в різні таблиці, тож база не захищає від сиріт. модуль 5
- м'яке видалення— soft delete
- Замість `DELETE` рядок позначають видаленим. Зберігає посилання й історію, але персональні дані лишаються, доки їх не анонімізовано, а кожен запит мусить враховувати мітку. модуль 5
- UUIDv7— UUIDv7
- UUID, у якому перші 48 біт — час Unix у мілісекундах, а решта випадкова. Значення зростають із часом, тож вставки в B-дерево йдуть у правий край; у PostgreSQL 18 його дає `uuidv7()`. модуль 5
- SQL-ін'єкція— SQL injection
- Атака, у якій дані користувача потрапляють у текст запиту й змінюють його структуру, тож база виконує не те, що задумав автор запиту. модуль 6
- параметр запиту— bind parameter
- Значення, яке драйвер передає базі окремо від тексту запиту й підставляє в місце `$1`, `$2` уже після розбору тексту. модуль 6
- prepared statement— prepared statement
- Prepared statement (підготовлений запит) — запит, розібраний базою один раз і збережений у сеансі під іменем; далі його виконують, передаючи лише значення параметрів. модуль 6
- простий протокол— simple query protocol
- Режим обміну з PostgreSQL, де клієнт надсилає одне повідомлення з повним текстом запиту, у якому можна об'єднати кілька команд через крапку з комою. модуль 6
- розширений протокол— extended query protocol
- Режим обміну з PostgreSQL, де розбір (Parse), прив'язування значень (Bind) і виконання (Execute) йдуть окремими повідомленнями, а текст може містити лише одну команду. модуль 6
- білий список— allowlist
- Перелік допустимих значень, з якого застосунок вибирає фрагмент запиту (назву колонки, напрям сортування) замість того, щоб вставляти в запит рядок користувача. модуль 6
- ORM— ORM (object-relational mapper)
- Бібліотека, що відображає рядки таблиць на об'єкти мови програмування й сама будує запити SQL за викликами методів. модуль 6
- проблема N+1— N+1 problem
- Запит за списком із N елементів, який виконує ще по одному запиту на кожен елемент, тож сторінка робить 1 + N запитів замість двох-трьох. модуль 6
- ліниве завантаження— lazy loading
- Поведінка ORM, за якої пов'язані об'єкти (позиції замовлення, товар) читаються з бази лише в момент першого звернення до них у коді. модуль 6
- пул з'єднань— connection pool
- Набір уже відкритих з'єднань до бази, які застосунок по черзі позичає для запитів замість того, щоб відкривати нове з'єднання щоразу. модуль 6
- режим пулу— pool mode
- Правило PgBouncer, коли серверне з'єднання повертається в пул: після закриття клієнта (session), після завершення транзакції (transaction) або після кожного запиту (statement). модуль 6
- серверне з'єднання— server connection
- З'єднання між PgBouncer і PostgreSQL. На відміну від клієнтських з'єднань до PgBouncer, їх небагато, і кожному відповідає процес бази. модуль 6
- збережена процедура— stored procedure
- Іменований блок коду, що живе в базі й викликається командою `CALL`; на відміну від функції, може сам комітити й відкочувати транзакції. модуль 6
- тригер— trigger
- Функція, яку база сама викликає до або після `INSERT`, `UPDATE` чи `DELETE` на таблиці, для кожного рядка або для всієї команди. модуль 6
- PL/pgSQL— PL/pgSQL
- Процедурна мова PostgreSQL зі змінними, умовами й циклами, якою пишуть функції, процедури й тригери. модуль 6
II. Всередині реляційної СУБД
- сторінка даних— data page
- Блок фіксованого розміру (8 КіБ у PostgreSQL, 16 КіБ в InnoDB), яким СУБД читає, кешує й пише файли таблиць та індексів; окремо від сторінки пам'яті ОС. модуль 7
- вказівник на рядок— line pointer
- Чотирибайтовий запис у заголовку сторінки PostgreSQL із зсувом і довжиною рядка на сторінці; через нього адреса рядка не залежить від того, де він лежить усередині сторінки. модуль 7
- ctid— ctid
- Системна колонка з адресою версії рядка в таблиці PostgreSQL: пара «номер сторінки, номер вказівника». Змінюється при UPDATE і VACUUM FULL. модуль 7
- heap-файл— heap file
- Файл таблиці як масив сторінок без порядку: новий рядок іде на будь-яку сторінку з вільним місцем. Так зберігає таблиці PostgreSQL. модуль 7
- вирівнювання— alignment
- Вимога, щоб значення типу починалося з адреси, кратної 1, 2, 4 або 8 байтів; для цього між колонками рядка виникають порожні байти, тож порядок колонок впливає на розмір рядка. модуль 7
- бітова карта NULL— null bitmap
- Необов'язкове поле заголовка рядка: по одному біту на колонку, що показує, які значення відсутні. Сам NULL не займає байтів даних. модуль 7
- TOAST— TOAST
- Механізм PostgreSQL для значень завбільшки понад приблизно 2 КіБ: їх стискають і, якщо треба, виносять шматками в окрему службову таблицю, лишаючи в рядку вказівник. модуль 7
- buffer pool— buffer pool
- Область пам'яті СУБД, де лежать копії сторінок даних; запити працюють із ними, а не з файлами. У PostgreSQL має розмір shared_buffers. модуль 7
- алгоритм годинника— clock sweep
- Політика витіснення буферів: стрілка обходить їх по колу, зменшує лічильник використання й витісняє той, де лічильник дійшов до нуля. модуль 7
- кільце буферів— buffer ring
- Невелика частина пулу, яку PostgreSQL виділяє для одноразового проходу (велике сканування, VACUUM), щоб він не витіснив гарячі сторінки решти запитів. модуль 7
- подвійне кешування— double buffering
- Стан, коли та сама сторінка лежить і в buffer pool СУБД, і в сторінковому кеші ОС, бо читання йде через файлову систему. модуль 7
- прямий ввід-вивід— direct I/O
- Читання й запис файлів повз кеш сторінок ОС (прапорець O_DIRECT); СУБД з власним кешем так уникають подвійного кешування. модуль 7
- кластерний індекс— clustered index
- Індекс, у листових сторінках якого лежать самі рядки таблиці в порядку ключа; так влаштовано кожну таблицю InnoDB за первинним ключем. модуль 7
- рядкове зберігання— row store
- Схема, за якої значення одного рядка лежать у файлі поруч; зручна для вставки й читання рядка цілком, але запит на одну колонку читає й решту. модуль 7
- B+-дерево— B+-tree
- Збалансоване дерево, у якому кожен вузол є сторінкою: пари «ключ → адреса рядка» лежать лише в листових сторінках, а внутрішні сторінки тримають роздільні ключі. Так влаштований типовий індекс PostgreSQL і InnoDB. модуль 8
- листова сторінка— leaf page
- Сторінка нижнього рівня B+-дерева (leaf), де лежать самі ключі з адресами рядків. Листові сторінки зв'язані в ланцюжок за порядком ключів, тож діапазон читається без повернення до кореня. модуль 8
- розбиття сторінки— page split
- Поділ повної сторінки індексу надвоє, коли в неї треба вставити ще один ключ: частина ключів переїжджає в нову сторінку, а батьківська отримує роздільний ключ. Висота дерева зростає лише тоді, коли ділиться корінь. модуль 8
- складений індекс— composite index
- Індекс за кількома колонками, у якому записи впорядковано спершу за першою колонкою, у межах її рівних значень за другою і так далі. модуль 8
- правило лівого префікса— leftmost prefix rule
- Складений індекс найкраще працює для умов, що задають початок його списку колонок: рівність на перших, потім не більше одного діапазону. Умова лише на пізнішу колонку індекс майже не використовує (PostgreSQL 18 пом'якшує це для першої колонки з малою кількістю значень). модуль 8
- покриваючий індекс— covering index
- Індекс, що містить усі колонки запиту, зокрема додані через `INCLUDE`, тож запит обходиться без читання таблиці. модуль 8
- частковий індекс— partial index
- Індекс лише для рядків, що відповідають умові `WHERE` у його визначенні. Малий за розміром і дешевий на запис, але запит використовує його, лише якщо його умова випливає з умови індексу. модуль 8
- індекс за виразом— expression index
- Індекс за значенням виразу над колонками, наприклад `lower(email)`. Запит використовує його, лише якщо містить той самий вираз. модуль 8
- GIN— GIN (generalized inverted index)
- Тип індексу, що зберігає відображення «значення → список рядків». Підходить для `jsonb`, масивів і повнотекстового пошуку, де рядок містить багато значень; повільніший на запис, ніж B-дерево. модуль 8
- GiST— GiST (generalized search tree)
- Тип індексу для даних, що впорядковуються не лінійно: геометрія, діапазони, пошук найближчих сусідів за відстанню. модуль 8
- BRIN— BRIN (block range index)
- Тип індексу, що для кожної групи сторінок таблиці зберігає лише найменше й найбільше значення колонки. Займає кілобайти на гігабайти даних, але діє, лише коли значення йдуть у порядку зберігання, як час у журналі подій. модуль 8
- HOT-оновлення— HOT update (heap-only tuple)
- Оновлення в PostgreSQL, що не змінює індексованих колонок і вміщує нову версію рядка на тій самій сторінці: нові записи в індекси не потрібні, індекс веде до старої версії, а та до нової. модуль 8
- write amplification— write amplification
- Write amplification (підсилення запису) — відношення обсягу реально записаних даних до обсягу змін, які зробив користувач. Кожен індекс, що оновлюється разом із рядком, збільшує його. модуль 8
- планувальник запитів— query planner
- Частина СУБД, що з еквівалентних способів виконати запит вибирає той, який за оцінкою найдешевший, і будує з нього план виконання. модуль 9
- план виконання— execution plan
- Дерево вузлів (сканування, JOIN, сортування, агрегація), яке виконавець обходить знизу вгору, щоб отримати результат запиту; його показує EXPLAIN. модуль 9
- вартість— cost
- Оцінка планувальника в умовних одиницях (одиниця — читання сторінки підряд), складена з вартості читання сторінок і обробки рядків; за нею порівнюються плани, а не за часом. модуль 9
- кардинальність— cardinality
- Кількість рядків, яку повертає вузол плану; планувальник оцінює її зі статистики (rows), а EXPLAIN ANALYZE показує справжню (actual rows). модуль 9
- вибірковість— selectivity
- Частка рядків таблиці, що проходять умову; від неї залежить, який спосіб читання таблиці найдешевший. модуль 9
- Seq Scan— sequential scan
- Вузол плану, що читає всю таблицю сторінка за сторінкою й перевіряє умову на кожному рядку (послідовне сканування); найдешевший, коли потрібна велика частка рядків. модуль 9
- Bitmap Heap Scan— bitmap scan
- Вузли Bitmap Index Scan і Bitmap Heap Scan. Спершу з індексу збирається бітова карта сторінок, потім ці сторінки читаються в фізичному порядку по одному разу. модуль 9
- Index Only Scan— index-only scan
- Вузол Index Only Scan, що бере значення з індексу й звертається до таблиці лише для сторінок, не позначених у карті видимості; кількість таких звернень показує Heap Fetches. модуль 9
- карта видимості— visibility map
- Бітова карта таблиці, що позначає сторінки, на яких усі версії рядків видимі всім транзакціям; її виставляє VACUUM, а оновлення знімають. модуль 9
- Nested Loop— nested loop
- Алгоритм JOIN (вкладений цикл), що для кожного рядка зовнішнього входу шукає пари у внутрішньому, зазвичай через індекс; підходить для малих зовнішніх входів і довільних умов. модуль 9
- Hash Join— hash join
- Алгоритм JOIN за рівністю, що будує хеш-таблицю з меншого входу й проходить другий вхід один раз; якщо таблиця не вміщається в пам'ять, працює порціями через тимчасові файли. модуль 9
- Merge Join— merge join
- Алгоритм JOIN за рівністю, що одночасно проходить два входи, впорядковані за ключем; вигідний, коли порядок уже є (індекс) або потрібен на виході. модуль 9
- скидання на диск— spill
- Запис проміжних даних сортування, хеш-таблиці чи агрегації в тимчасові файли, коли вони не вміщаються в work_mem; у плані його видно як Disk, Batches більше одиниці або temp written. модуль 9
- розширена статистика— extended statistics
- Статистика по кількох колонках (CREATE STATISTICS — dependencies, ndistinct, mcv), яка виправляє оцінку кардинальності, коли умови на колонки залежать одна від одної. модуль 9
- паралельний план— parallel plan
- План із вузлом Gather, у якому кілька процесів-робітників виконують одну й ту саму частину плану над різними частинами даних, а провідний процес збирає результат. модуль 9
- рівень ізоляції— isolation level
- Налаштування транзакції, яке визначає, які аномалії конкурентного виконання система їй дозволяє. модуль 10
- брудне читання— dirty read
- Аномалія, коли транзакція бачить зміни іншої транзакції, яка ще не закомітила і може відкотитися. модуль 10
- неповторюване читання— non-repeatable read
- Аномалія, коли повторне читання того самого рядка в одній транзакції дає інше значення, бо між читаннями інша транзакція закомітила зміну. модуль 10
- фантомне читання— phantom read
- Аномалія, коли повторний запит з тією самою умовою повертає інший набір рядків, бо інша транзакція додала або видалила рядки. модуль 10
- втрачене оновлення— lost update
- Аномалія, коли дві транзакції читають те саме значення, обидві записують результат власного обчислення, і зміна однієї зникає. модуль 10
- write skew— write skew
- Аномалія, коли дві транзакції читають те саме, пишуть різні рядки і разом порушують правило, яке кожна окремо дотримала. модуль 10
- snapshot isolation— snapshot isolation
- Рівень ізоляції, за якого транзакція працює з незмінним знімком даних на початок своєї роботи; допускає write skew. модуль 10
- SERIALIZABLE— serializable
- Найсуворіший рівень ізоляції, за якого результат дорівнює якомусь послідовному виконанню транзакцій; у PostgreSQL це SSI з помилками 40001. модуль 10
- MVCC— MVCC (multiversion concurrency control)
- Схема, у якій зміна рядка створює нову версію, а читачі бачать версію, що відповідає їхньому знімку, тож читання не блокують запис. модуль 10
- версія рядка— row version
- Окремий фізичний екземпляр рядка в таблиці; у PostgreSQL кожне UPDATE створює нову версію, а стару лишає до очищення. модуль 10
- двофазне блокування— two-phase locking (2PL)
- Протокол, за якого транзакція спершу лише захоплює блокування, а відпускає їх усі тільки після завершення; гарантує серіалізованість ціною очікувань. модуль 10
- VACUUM— VACUUM
- Процес PostgreSQL, що прибирає мертві версії рядків, позначає місце для повторного використання й заморожує старі номери транзакцій. модуль 10
- bloat— bloat
- Стан, коли таблиця або індекс займають значно більше місця, ніж потрібно живим даним, бо мертві версії рядків не прибрано. модуль 10
- wraparound— transaction ID wraparound
- Ситуація, коли 32-бітний лічильник транзакцій PostgreSQL наближається до кола, а старі рядки не заморожено; сервер перестає приймати записи. модуль 10
- WAL— write-ahead log (WAL)
- Послідовний журнал змін, який СУБД дописує раніше, ніж змінені сторінки потрапляють у файли даних; за ним повторюють зміни після збою, будують бекапи й репліки. модуль 11
- LSN— LSN (log sequence number)
- Позиція в журналі у байтах від його початку; у PostgreSQL її друкують як два шістнадцяткові числа, наприклад 0/AE013218. Кожна сторінка зберігає LSN останньої зміни. модуль 11
- сегмент WAL— WAL segment
- Файл журналу фіксованого розміру (типово 16 МБ). Його ім'я складається з номера лінії часу й номера сегмента в шістнадцятковому записі. модуль 11
- torn page— torn page
- Частково записана сторінка: початок уже новий, кінець ще старий, бо збій стався посеред запису 8 КіБ. модуль 11
- повний образ сторінки— full-page image
- Копія цілої сторінки в журналі, яку записують при першій зміні сторінки після контрольної точки, щоб відновлення могло замінити розірвану сторінку. модуль 11
- контрольна точка— checkpoint
- Момент, коли СУБД скидає на диск усі змінені сторінки з buffer pool й записує адресу, з якої після збою починати повтор журналу. модуль 11
- точка REDO— REDO point
- LSN, з якого відновлення після збою починає повтор журналу; записується контрольною точкою в pg_control. модуль 11
- redo— redo
- Застосування записів журналу до сторінок під час відновлення; запис пропускають, якщо LSN сторінки вже не менший за LSN запису, тому повтор безпечно повторювати. модуль 11
- fsync— fsync
- Системний виклик, який повертається, коли ядро вважає дані файла записаними на пристрій; на ньому тримається довговічність коміту. модуль 11
- груповий коміт— group commit
- Скидання журналу одним викликом для кількох транзакцій, які комітяться одночасно, щоб не чекати диска окремо для кожної. модуль 11
- логічний бекап— logical backup
- Копія, зроблена запитами до бази: скрипт SQL або архів, з якого відтворюють таблиці й дані; відновлює стан на момент початку копіювання. модуль 11
- фізичний бекап— physical backup
- Копія файлів каталогу даних разом із журналом, потрібним для узгодженості; основа для відновлення на момент часу. модуль 11
- безперервне архівування WAL— continuous archiving
- Копіювання кожного завершеного сегмента журналу в окреме сховище, щоб з базовим бекапом відтворити стан бази на будь-яку мить. модуль 11
- timeline— timeline
- Гілка історії журналу; після відновлення з архіву сервер відкриває нову timeline з наступним номером, щоб нові записи не змішувались зі старими. модуль 11
- інкрементальний бекап— incremental backup
- Копія лише тих блоків, що змінилися після попередньої копії; для відновлення її поєднують із ланцюжком попередніх копій. модуль 11
III. Масштабування і розподіленість
- мастер— primary (leader)
- Вузол, який приймає запис і віддає його зміни іншим копіям. У документації PostgreSQL він зветься primary. модуль 12
- репліка— replica (follower)
- Копія бази, яка отримує зміни від мастера й застосовує їх у тому самому порядку. У режимі hot standby відповідає на читання, але не приймає запис. модуль 12
- потокова реплікація— streaming replication
- Фізична реплікація PostgreSQL: процес walsender на мастері надсилає байти WAL репліці в міру їх появи, а walreceiver записує їх і застосовує. модуль 12
- слот реплікації— replication slot
- Запис на мастері, який пам'ятає, до якої позиції WAL дійшов споживач, і не дає прибрати WAL далі. Покинутий слот тримає журнал, поки не заповниться диск. модуль 12
- синхронна реплікація— synchronous replication
- Режим, у якому COMMIT повертає успіх лише після підтвердження від репліки (отримала, зберегла чи застосувала, залежно від synchronous_commit). Ціна: затримка мережі в кожному коміті. модуль 12
- асинхронна реплікація— asynchronous replication
- Режим, у якому мастер підтверджує коміт, не чекаючи репліки. Швидко, але закомічені транзакції, яких репліка не отримала, зникають, якщо мастер загине. модуль 12
- лаг реплікації— replication lag
- Відставання репліки від мастера: у байтах WAL (різниця LSN) або в часі (write_lag, flush_lag, replay_lag у pg_stat_replication). модуль 12
- читання власних записів— read-your-writes
- Гарантія, що користувач після свого запису бачить його в наступних читаннях. Під лагом порушується, якщо читання потрапило на репліку, яка ще не застосувала цей запис. модуль 12
- монотонне читання— monotonic reads
- Гарантія, що користувач не бачить даних «з минулого» після того, як побачив новіші. Порушується, коли два читання потрапляють на репліки з різним лагом. модуль 12
- конфлікт із відновленням— recovery conflict
- Ситуація на репліці, коли застосування WAL вимагає прибрати те, що потрібне запиту, який ще виконується; запит скасовують із помилкою canceling statement due to conflict with recovery. модуль 12
- логічна реплікація— logical replication
- Реплікація змін на рівні рядків таблиць за моделлю публікація-підписка. Дозволяє копіювати частину таблиць і працювати між різними мажорними версіями, але не переносить DDL і послідовності. модуль 12
- failover— failover
- Перехід ролі мастера до іншого вузла (перемикання): вручну (pg_promote) або автоматично (Patroni). Після перемикання нова лінія часу починається з позиції, до якої дійшла репліка. модуль 12
- split brain— split brain
- Стан, коли два вузли одночасно вважають себе мастером і приймають запис у різні історії, які вже не злити без втрат. модуль 12
- фенсинг— fencing
- Гарантоване виключення старого мастера з роботи (вимкнення вузла, відбирання мережі чи сховища) до того, як новий почне приймати запис, щоб не допустити розщеплення мозку. модуль 12
- кворум— quorum
- Мінімальна кількість вузлів, відповіді яких потрібні для рішення. У реплікації без мастера читання з R і запис у W вузлів із N перетинаються, якщо R + W > N. модуль 12
- партиціювання— partitioning
- Поділ однієї таблиці на частини (партиції) всередині одного сервера; частини лишаються однією таблицею для запитів, а запит із ключем партиціювання читає лише потрібні. модуль 13
- шардинг— sharding
- Поділ даних між окремими серверами (шардами), кожен з яких зберігає свою частину й обробляє запити до неї; масштабує запис, але ускладнює транзакції та запити через кілька шардів. модуль 13
- ключ шардування— shard key
- Колонка, за значенням якої правило розміщення визначає, на якому шарді лежить рядок; від нього залежить, які запити дешеві, а які розсилаються на всі шарди. модуль 13
- консистентне хешування— consistent hashing
- Спосіб розміщення, за якого вузли й ключі відображаються в один замкнений у кільце простір хешів, а ключ належить першому вузлу за годинниковою стрілкою; додавання вузла переселяє лише сусідню дугу. модуль 13
- гарячий ключ— hot key
- Ключ, на який припадає непропорційно велика частка запитів; хеш-шардинг його не розподіляє, і шард із ним стає вузьким місцем. модуль 13
- scatter-gather— scatter-gather
- Виконання запиту без ключа шардування. Запит розсилається на всі шарди, а відповіді збираються; затримку визначає найповільніший шард. модуль 13
- колокація— co-location
- Розміщення даних, що з'єднуються або читаються разом, на одному шарді, щоб запит і транзакція не виходили за його межі. модуль 13
- двофазний коміт— two-phase commit (2PC)
- Протокол атомарного коміту на кількох вузлах. Спершу кожен учасник готується й обіцяє, що зможе зафіксувати, потім координатор розсилає спільне рішення; якщо координатор зникне між фазами, учасники чекають із блокуваннями. модуль 13
- лінеаризованість— linearizability
- Модель консистентності, за якої система поводиться так, ніби копія одна: кожна операція спрацьовує миттєво між початком і відповіддю, а порядок збігається з реальним часом. Не плутати із серіалізованістю транзакцій. модуль 13
- causal consistency— causal consistency
- Модель, за якої всі бачать причинно пов'язані операції в однаковому порядку (відповідь після запитання); незалежні операції можуть бути видимі в різному порядку. модуль 13
- eventual consistency— eventual consistency
- Гарантія, що коли записи припиняються, усі копії врешті збігаються; нічого не обіцяє про те, що бачать читачі в проміжку, і потребує правила розв'язання конфліктних записів. модуль 13
- теорема CAP— CAP theorem
- Твердження (Брюер, Гілберт і Лінч), що в мережі, яка може втрачати повідомлення, неможливо водночас гарантувати лінеаризовність і відповідь кожного живого вузла на кожен запит; вибір постає лише під час розділення мережі. модуль 13
- PACELC— PACELC
- Розширення CAP (Абаді): при розділенні вибирають між доступністю й консистентністю, а без розділення між затримкою й консистентністю. модуль 13
- консенсус— consensus
- Задача, у якій група вузлів ухвалює одне рішення (лідер, наступний запис журналу), хоч частина вузлів і повідомлень зникає; алгоритми (Raft, Paxos) спираються на правило більшості. модуль 13
IV. Нереляційні бази даних
- cache stampede— cache stampede
- Лавина запитів до бази в момент, коли значення зникло з кешу: багато одночасних запитів бачать промах і кожен сам іде перераховувати те саме значення. модуль 14
- cache-aside— cache-aside
- Спосіб кешування, у якому кеш про базу нічого не знає: застосунок сам читає кеш, на промаху бере дані з бази й кладе їх у кеш. модуль 14
- write-through— write-through
- Спосіб кешування, у якому кожен запис іде і в базу, і в кеш в одному шляху, тож кеш лишається теплим, але запис дорожчає. модуль 14
- інвалідація кешу— cache invalidation
- Скидання або оновлення закешованого значення після того, як змінилися дані, з яких його порахували; найважче в кешуванні через гонки між читачами й записом. модуль 14
- TTL— TTL (time to live)
- Час життя ключа: після його спливу ключ вважається простроченим і зникає; страхувальна сітка кеша, коли інвалідація пропустила зміну. модуль 14
- витіснення— eviction
- Видалення ключів, коли пам'ять сховища впирається в ліміт; за політикою (`allkeys-lru`, `volatile-ttl`, `noeviction`) обирається, що саме викинути або чи відмовити в записі. модуль 14
- hit rate— hit rate
- Частка звернень до кеша, на які він відповів сам: влучання, поділені на суму влучань і промахів. модуль 14
- RDB— RDB snapshot
- Спосіб персистентності Redis і Valkey: час від часу дочірній процес після fork записує знімок усього набору в файл; компактний, але аварія губить усе після останнього знімка. модуль 14
- AOF— AOF (append-only file)
- Спосіб персистентності Redis і Valkey: кожну команду запису дописують у журнал, а параметр `appendfsync` вирішує, коли виконувати `fsync`. модуль 14
- хеш-слот— hash slot
- Одна з 16 384 комірок, на які Valkey Cluster ділить простір ключів за `CRC16(ключ) mod 16384`; кожен вузол володіє діапазоном слотів. модуль 14
- хеш-тег— hash tag
- Частина ключа у фігурних дужках, яку одну хешують при виборі слота, щоб кілька ключів потрапили в той самий слот і їх можна було зачепити однією командою. модуль 14
- HyperLogLog— HyperLogLog
- Імовірнісна структура для підрахунку унікальних елементів: фіксований розмір (≈ 12 КБ) і стандартна похибка близько 0.81 %. модуль 14
- stream— stream
- Структура Redis і Valkey для журналу подій із групами споживачів: прочитане повідомлення лишається в списку непідтверджених, доки споживач не виконає `XACK`. модуль 14
- stale-while-revalidate— stale-while-revalidate
- Стратегія кеша, за якої прострочене значення віддається одразу, а свіже перераховується у фоні; користувачі не чекають перерахунку. модуль 14
- fencing-токен— fencing token
- Число, що зростає з кожним взятим блокуванням: сховище відхиляє запис із токеном, меншим за вже бачений, тож клієнт зі спізнілим блокуванням не затре дані. модуль 14
- патерн доступу— access pattern
- Одне конкретне питання, яке застосунок ставитиме базі, разом із частотою й обсягом відповіді: «замовлення покупця за датою». У DynamoDB перелік патернів доступу складають до схеми, бо від нього залежать ключі й індекси. модуль 15
- item— item
- Одиниця зберігання в таблиці DynamoDB: набір атрибутів з первинним ключем, до 400 КБ. Items однієї таблиці можуть мати різні набори атрибутів, крім ключових. модуль 15
- ключ сортування— sort key
- Другий атрибут первинного ключа DynamoDB. Впорядковує items всередині однієї колекції ітемів і дозволяє читати діапазон: `begins_with`, `BETWEEN`, зворотний порядок. модуль 15
- item collection— item collection
- Усі items з однаковим ключем партиції. Лежать разом і читаються одним запитом; у таблиці з локальним вторинним індексом колекція обмежена 10 ГБ. модуль 15
- single-table design— single-table design
- Спосіб моделювання, за якого різні сутності лежать в одній таблиці DynamoDB, а ключі з префіксами (`PROD#…`, `ORDER#…`) підібрано так, щоб те, що читається разом, опинилось в одній item collection. модуль 15
- глобальний вторинний індекс— global secondary index (GSI)
- Копія items таблиці DynamoDB, організована за іншим ключем партиції й сортування. Оновлюється асинхронно, тому читання з нього лише eventually consistent; ключ індексу задають звичайні атрибути item. модуль 15
- локальний вторинний індекс— local secondary index (LSI)
- Індекс DynamoDB з тим самим ключем партиції, що в таблиці, але іншим ключем сортування. Створюється лише разом із таблицею, дозволяє сильно консистентні читання, але обмежує item collection 10 ГБ. модуль 15
- index overloading— index overloading
- Один вторинний індекс, що обслуговує кілька сутностей, бо їхні ключі індексу розрізняються префіксами: той самий GSI віддає і замовлення покупця, і товари продавця. модуль 15
- розріджений індекс— sparse index
- Вторинний індекс, у який потрапляють лише items, що мають ключові атрибути індексу. Індекс за `promo_code` містить тільки замовлення з промокодом, а не всю таблицю. модуль 15
- backfill— backfill
- Фаза створення нового GSI на наявній таблиці, коли база проходить усі items й записує в індекс ті, що мають ключові атрибути. До кінця заповнення (`ACTIVE`) індекс недоступний для запитів. модуль 15
- adaptive capacity— adaptive capacity
- Автоматичний перерозподіл пропускної здатності DynamoDB до партицій із більшим трафіком, зокрема винесення гарячого item на окрему партицію. Стелі однієї партиції (3000 читань і 1000 записів на секунду) не підіймає. модуль 15
- одиниця читання й запису— read and write capacity unit (RCU, WCU)
- Міра пропускної здатності DynamoDB. Одиниця читання це одне strongly consistent читання item до 4 КБ на секунду або два eventually consistent; одиниця запису це один запис до 1 КБ на секунду. модуль 15
- BSON— BSON
- Двійковий формат документів MongoDB: JSON із додатковими типами (дата, `Decimal128`, `ObjectId`, ціле й дробове число різних розмірів), у якому зберігаються дані й передаються запити. модуль 16
- колекція— collection
- Набір документів у MongoDB, відповідник таблиці; документи однієї колекції не зобов'язані мати однакові поля, якщо цього не вимагає валідація схеми. модуль 16
- ObjectId— ObjectId
- Типовий ключ `_id` у MongoDB, 12 байтів; починається з часу створення в секундах, тож ключі, створені пізніше, майже завжди більші. модуль 16
- вкладений документ— embedded document
- Документ або масив документів усередині іншого документа. Читається й змінюється разом із ним однією операцією. Не плутати з ембедингом для векторного пошуку. модуль 16
- посилання між документами— document reference
- Поле, що містить `_id` документа з іншої колекції; сервер сам його не перевіряє, з'єднання виконує застосунок або `$lookup`. модуль 16
- $lookup— $lookup
- Стадія aggregation pipeline, що додає до кожного документа відповідні документи з іншої колекції: аналог `LEFT JOIN`, без зовнішніх ключів і гарантій цілісності. модуль 16
- валідація схеми— schema validation
- Правила колекції (зазвичай `$jsonSchema`), за якими сервер відхиляє вставку чи зміну документа; без них схему підтримує лише застосунок. модуль 16
- multikey-індекс— multikey index
- Індекс за полем-масивом: у ньому окремий запис на кожен елемент масиву кожного документа, тож запит за одним елементом знаходить документ без сканування колекції. модуль 16
- aggregation pipeline— aggregation pipeline
- Послідовність стадій (`$match`, `$unwind`, `$group`, `$sort`, `$lookup`), кожна з яких читає виведення попередньої; основний спосіб робити звіти в MongoDB. модуль 16
- сканування колекції— collection scan (COLLSCAN)
- План, у якому MongoDB читає всі документи колекції; відповідає `Seq Scan` у PostgreSQL, у `explain` позначається `COLLSCAN`. модуль 16
- write concern— write concern
- Параметр запису в MongoDB (`w`, `j`), що визначає, скільки вузлів replica set мають підтвердити запис, перш ніж клієнт отримає успіх; `w: 1` чекає лише мастера, `w: "majority"` чекає більшість. модуль 16
- read concern— read concern
- Параметр читання в MongoDB, що визначає, які дані бачить запит: `local` (що є на вузлі, навіть якщо може відкотитись), `majority` (підтверджені більшістю), `snapshot` (знімок на момент початку транзакції). модуль 16
- багатодокументна транзакція— multi-document transaction
- Транзакція MongoDB, що змінює кілька документів або колекцій атомарно. З 4.0 на replica set, з 4.2 на шардованому кластері; одиночний документ атомарний і без неї. модуль 16
- oplog— oplog
- Журнал операцій змін у MongoDB (колекція `local.oplog.rs`), який репліки читають і відтворюють; відповідає потоку WAL у потоковій реплікації PostgreSQL. модуль 16
- replica set— replica set
- Група вузлів MongoDB з одним мастером (primary) і репліками (secondaries); автоматично обирає нового мастера, коли поточний зникає. Навіть один вузол у replica set вмикає oplog і транзакції. модуль 16
- LSM-дерево— LSM-tree (log-structured merge-tree)
- Структура зберігання, що нічого не змінює на місці: записи накопичуються в пам'яті, скидаються на диск відсортованими незмінними файлами, а фонова компакція зливає файли. Швидкий запис оплачується складнішим читанням і write amplification. модуль 17
- memtable— memtable
- Відсортована структура в пам'яті, куди LSM-база спершу записує зміни. Коли вона розростається, її вміст скидається на диск у новий SSTable. модуль 17
- commit log— commit log
- Файл, у який Cassandra й ScyllaDB дописують кожен запис до того, як він потрапить у таблицю. Відіграє роль WAL: після аварії memtable відновлюється з нього. Типово `fsync` робиться за розкладом, а не на кожен запис. модуль 17
- SSTable— SSTable (sorted string table)
- Незмінний файл на диску з відсортованими за ключем рядками, який дає скидання memtable або компакція. Складається з даних, індексу, bloom-фільтра й службових файлів. модуль 17
- компакція— compaction
- Фонове злиття SSTable в новий файл: лишає найновішу версію кожної комірки, викидає перекриті версії й прострочені tombstone. Стратегії (size-tiered, leveled, time-window) по-різному міняють read, write і space amplification. модуль 17
- bloom-фільтр— bloom filter
- Компактна структура, що про ключ каже «тут точно немає» або «можливо є». Хибного «немає» не дає, хибне «можливо» має малу задану імовірність. Дозволяє LSM-базі не читати SSTable, де ключа нема. модуль 17
- tombstone— tombstone
- Запис із міткою часу, що позначає видалення комірки, рядка, діапазону чи партиції. Живе щонайменше `gc_grace_seconds` і зникає при компакції після цього. Читання мусить пройти маркери на шляху, тож їх велика кількість сповільнює запити. модуль 17
- ключ партиції— partition key
- Перша частина первинного ключа в Cassandra й ScyllaDB. Її хеш (token) визначає, які вузли зберігають рядки партиції. Не плутати з партиціюванням таблиці в PostgreSQL: тут партиція є одиницею розподілу між вузлами. модуль 17
- ключ кластеризації— clustering key
- Колонки первинного ключа після ключа партиції. Впорядковують рядки всередині партиції, тож діапазон у ній читається послідовно. модуль 17
- таблиця на запит— table per query
- Підхід до моделювання в Cassandra й ScyllaDB: записують список запитів, і кожному відповідає окрема таблиця з ключем, що дозволяє прочитати одну партицію. Дані дублюються між таблицями, а застосунок пише в усі. модуль 17
- бакет— time bucket
- Часовий відрізок (наприклад місяць), який додають до ключа партиції, щоб партиція не росла без меж. Запит, що охоплює кілька відрізків, читає кілька партицій. модуль 17
- рівень консистентності— consistency level
- Параметр запиту в Cassandra й ScyllaDB (`ONE`, `QUORUM`, `ALL` та інші): скільки реплік мають відповісти, щоб запит вважався успішним. Окремо для запису й читання; при `R + W > N` читання бачить останній підтверджений запис. модуль 17
- часовий ряд— time series
- Послідовність записів, прив'язаних до моменту часу, яка здебільшого лише дописується й читається вікнами за часом. Типові потреби: партиціювання за часом, ретеншн і даунсемплінг. модуль 17
- ретеншн— retention
- Правило, за яким старі дані видаляються: за віком, а не за вмістом. Дешево робиться цілими блоками: відчепленням партиції в PostgreSQL або закінченням TTL у файлі зі стратегією time-window. модуль 17
- даунсемплінг— downsampling
- Заміна докладних даних часового ряду агрегатами за крупніший відрізок (година, день): рядків стає в десятки разів менше. У PostgreSQL це матеріалізоване представлення з `GROUP BY` за часом. модуль 17
- граф властивостей— property graph
- Модель даних із вузлів і напрямлених ребер, у якій і вузли, і ребра мають властивості, а вузли ще й мітки; лежить в основі Neo4j, GQL і SQL/PGQ. модуль 18
- вузол— node
- Сутність графа властивостей, наприклад покупець чи товар; має одну або кілька міток і набір властивостей. модуль 18
- ребро— relationship
- Напрямлений зв'язок між двома вузлами графа властивостей із типом і власними властивостями; запит може читати його в будь-який бік. модуль 18
- мітка— label
- Назва типу вузла в графі властивостей, як Customer чи Product; за міткою запит обирає початкові вузли. модуль 18
- триплет RDF— RDF triple
- Факт у вигляді «суб'єкт — предикат — об'єкт», з яких складається RDF; ребро в ньому властивостей не має. модуль 18
- SPARQL— SPARQL
- Мова запитів до RDF-даних, рекомендація W3C (версія 1.1 від 2013 року). модуль 18
- Cypher— Cypher
- Декларативна мова запитів до графів властивостей з Neo4j, яка малює шаблон текстом, як (a)-[:FRIEND]-(b); версія Cypher 25 наближена до GQL. модуль 18
- index-free adjacency— index-free adjacency
- Спосіб зберігання графа, коли вузол безпосередньо посилається на свої ребра, тож крок обходу є розіменуванням вказівника, а не пошуком в індексі. модуль 18
- обхід графа— graph traversal
- Послідовне проходження від стартового вузла по ребрах до сусідів, їхніх сусідів тощо; рекурсивний CTE і шаблони Cypher виражають обхід по-різному. модуль 18
- шаблон шляху— path pattern
- Опис форми шляху в графі в Cypher, GQL і SQL/PGQ: вузли, ребра, їхні типи й мітки та кількість повторів, наприклад -[:FRIEND]-{1,6}. модуль 18
- пошук у ширину (BFS)— breadth-first search
- Обхід, який обробляє вузли за зростанням відстані від старту й відкидає вже відвідані; у SQL його дає рекурсивний CTE з UNION, у Cypher SHORTEST. модуль 18
- вибух шляхів— path explosion
- Зростання кількості шляхів з глибиною приблизно в разів, що дорівнює середній кількості сусідів, тоді як кількість різних досяжних вузлів обмежена розміром графа. модуль 18
- GQL— GQL
- Мова запитів до графів властивостей, стандарт ISO/IEC 39075:2024; окрема мова, не розширення SQL. модуль 18
- SQL/PGQ— SQL/PGQ
- Частина 16 стандарту SQL:2023: таблиці описують як граф властивостей (CREATE PROPERTY GRAPH) і запитують шаблонами через GRAPH_TABLE; у PostgreSQL немає. модуль 18
- найкоротший шлях— shortest path
- Шлях між двома вузлами з найменшою кількістю ребер; у Cypher його шукає SHORTEST або shortestPath(), а не перебір усіх шляхів. модуль 18
V. Аналітика і пошук
- колонкове зберігання— columnar storage
- Спосіб зберігання таблиці, за якого значення однієї колонки лежать підряд окремо від інших колонок; запит читає лише потрібні колонки, а однорідні значення добре стискаються. модуль 19
- векторизоване виконання— vectorized execution
- Виконання запиту, за якого оператори плану передають одне одному пачку з тисяч значень однієї колонки, а не по одному рядку; зменшує накладні витрати на виклики й дає змогу застосувати SIMD. модуль 19
- RLE— run-length encoding (RLE)
- Стиснення, що замінює серію однакових значень парою «значення, кількість повторів»; працює для відсортованих колонок і колонок з довгими серіями. модуль 19
- словникове кодування— dictionary encoding
- Стиснення, що зберігає перелік різних значень колонки й пише замість кожного значення його номер у переліку. модуль 19
- дельта-кодування— delta encoding
- Стиснення, що зберігає різницю з попереднім значенням замість самого значення; ефективне для зростаючих послідовностей, як ідентифікатори чи час. модуль 19
- мін-макс індекс— zone map
- Найменше й найбільше значення колонки для кожного шматка даних (групи рядків, гранули); запит пропускає шматки, діапазон яких не перетинає умову. Аналог BRIN. модуль 19
- розріджений первинний індекс— sparse primary index
- Індекс, що зберігає один запис на групу рядків (у ClickHouse на гранулу з 8192 рядків), а не на кожен рядок; працює, бо таблицю впорядковано за ключем індексу. модуль 19
- гранула— granule
- Найменша порція рядків таблиці MergeTree, яку ClickHouse читає й адресує розрідженим індексом; типово 8192 рядки. модуль 19
- група рядків— row group
- Горизонтальна частина файлу Parquet (а також блок сховища DuckDB), у якій кожна колонка лежить окремим шматком з власною статистикою мінімуму й максимуму. модуль 19
- таблиця фактів— fact table
- Центральна таблиця схеми «зірка», що зберігає вимірювані події (рядок замовлення з кількістю й ціною) і ключі до вимірів. модуль 19
- таблиця вимірів— dimension table
- Довідник, за яким групують і фільтрують факти: товар, покупець, час, категорія. модуль 19
- схема «зірка»— star schema
- Організація аналітичних даних, за якої таблиця фактів пов'язана з кожним виміром напряму одним ключем, а виміри не нормалізуються далі. модуль 19
- схема «сніжинка»— snowflake schema
- Різновид зірки, у якому виміри нормалізовано: товар посилається на категорію, покупець на населений пункт; менше дублювання, більше `JOIN`. модуль 19
- ETL і ELT— ETL and ELT
- Два порядки доставки даних в аналітику: ETL перетворює дані до завантаження, ELT завантажує сирі дані й перетворює їх запитами вже в аналітичній системі. модуль 19
- захоплення змін (CDC)— change data capture (CDC)
- Читання потоку змін рядків з журналу транзакційної бази (для PostgreSQL через логічне декодування WAL) і доставка його в інші системи майже в реальному часі. модуль 19
- інвертований індекс— inverted index
- Індекс, що для кожної лексеми зберігає список документів, де вона трапляється. Запит читає кілька списків замість усіх документів; так влаштований GIN над `tsvector` і індекс Lucene. модуль 20
- лексема— lexeme
- Нормалізована форма слова, яку зберігає `tsvector`: «чохли» й «чохлів» дають лексему «чохол». модуль 20
- стемінг— stemming
- Нормалізація слів відрізанням закінчень за правилами. Дає основу, яка не обов'язково є словом, і не знає чергувань на кшталт «чохол» — «чохлів». модуль 20
- лематизація— lemmatization
- Зведення форми слова до початкової за словником (hunspell, Morfologik). Для мов із багатою морфологією, як українська, точніша за стемінг. модуль 20
- стоп-слова— stop words
- Дуже поширені слова («для», «від», «і»), які прибирають з індексу й запиту, бо вони не відрізняють документи один від одного. модуль 20
- BM25— BM25
- Формула ранжування: сума по словах запиту з множників `IDF` (рідкісне слово важить більше) і насиченої частоти слова з поправкою на довжину документа. Типова в Lucene й OpenSearch. модуль 20
- косинусна відстань— cosine distance
- Міра віддаленості двох векторів: `1 − cos(кут між ними)`. У pgvector оператор `<=>`; для нормованих векторів дорівнює `1 − скалярний добуток`. модуль 20
- ANN— approximate nearest neighbours (ANN)
- Наближений пошук найближчих сусідів: індекс повертає майже найближчі вектори швидше за точний пошук і платить за це recall. модуль 20
- HNSW— HNSW
- Індекс ANN у вигляді графа з шарів: верхні шари рідкі й дають довгі стрибки, нижній містить усі вектори. Параметри `m`, `ef_construction`, `ef_search`. модуль 20
- IVFFlat— IVFFlat
- Індекс ANN, що ділить вектори на кластери (`lists`) і шукає лише в кількох найближчих до запиту (`probes`). Будується швидко, але потребує даних на момент побудови. модуль 20
- recall— recall
- Частка справжніх відповідей, які повернув пошук. Recall@10 для ANN-індексу: скільки з десяти точних найближчих сусідів він знайшов. модуль 20
- nDCG— nDCG
- Метрика якості видачі з урахуванням місця: релевантний документ на місці `r` дає `1/log2(r + 1)`, сума ділиться на найкращу можливу. Значення від 0 до 1. модуль 20
- гібридний пошук— hybrid search
- Поєднання повнотекстового й векторного пошуків: два списки результатів зливають в один, найчастіше за місцями (RRF). модуль 20
- reciprocal rank fusion— reciprocal rank fusion (RRF)
- Злиття списків за місцями: документ отримує `Σ 1 / (k + ранг)` по кожному списку, `k` зазвичай 60. Не залежить від шкал оцінок. модуль 20
VI. Експлуатація і вибір
- роль— role
- Єдина в PostgreSQL сутність для користувача й групи: з правом LOGIN вона підключається, без нього лише збирає привілеї, які видають іншим ролям. модуль 21
- PUBLIC— PUBLIC
- Псевдороль «усі ролі». За замовчуванням має CONNECT на нові бази й EXECUTE на нові функції, тож ці права відбирають явно. модуль 21
- привілеї за замовчуванням— default privileges
- Налаштування ALTER DEFAULT PRIVILEGES: які права автоматично отримує об'єкт, створений названою роллю в схемі. Діють лише на майбутні об'єкти цієї ролі. модуль 21
- SECURITY DEFINER— SECURITY DEFINER
- Властивість функції виконуватись з правами власника, а не викликача. Дає контрольований прохід до даних, але потребує фіксованого search_path і відкликання EXECUTE у PUBLIC. модуль 21
- захист на рівні рядків (RLS)— row-level security (RLS)
- Механізм, який додає до кожного запиту до таблиці умову на рядки за політиками CREATE POLICY. Без політики для ролі вона не бачить жодного рядка. модуль 21
- обхід RLS— RLS bypass
- Випадки, коли політики не діють: суперкористувач і роль з BYPASSRLS завжди, власник таблиці, поки не виконано FORCE ROW LEVEL SECURITY. модуль 21
- pg_hba.conf— pg_hba.conf
- Файл правил автентифікації клієнтів: для типу з'єднання, бази, ролі й адреси вказує метод. Діє перший рядок, що збігся. модуль 21
- SCRAM-SHA-256— SCRAM-SHA-256
- Типовий метод автентифікації за паролем у PostgreSQL з версії 14. Сервер зберігає значення для перевірки, а пароль у мережі не передається. модуль 21
- sslmode— sslmode
- Параметр libpq, що задає вимогливість клієнта до TLS. Типовий prefer не гарантує шифрування, require шифрує без перевірки сервера, verify-full перевіряє ланцюжок і ім'я. модуль 21
- персональні дані— personal data
- Відомості, за якими можна впізнати людину: ім'я, email, дата народження, адреса, а іноді й поведінка. Для бази це набір вимог до доступу, строку зберігання й стирання. модуль 21
- анонімізація— anonymisation
- Необоротна заміна персональних даних у рядку так, що людину вже не впізнати, а сам рядок лишається для обліку. Копії в бекапах і системах-споживачах цим не змінюються. модуль 21
- логічне декодування— logical decoding
- Витягання змін рядків із WAL через слот реплікації й плагін виводу. На ньому тримаються логічна реплікація й CDC. модуль 21
- outbox— transactional outbox
- Шаблон, коли подію для іншої системи пишуть у таблицю в тій самій транзакції, що й зміну даних, а окремий процес доставляє її з повтором. модуль 21
- подвійний запис— dual write
- Запис застосунку в дві системи окремими кроками. Збій між кроками лишає системи різними, бо спільного коміту немає. модуль 21
- polyglot persistence— polyglot persistence
- Підхід, коли різні задачі системи зберігають у різних базах під свою модель даних. Ціна: синхронізація, ще один бекап, моніторинг і команда на кожну. модуль 21