Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Стендап Сьогодні
Added 06 Dec 2025

Стендап Сьогодні

@stendap_sogodni
Number of subscribers: 564
Photos: 181
Videos: 14
Links: 1,110
Description:
👨‍💻 Програмування та більше. Тільки власний контент. Пости щодня. Сторінка автора: https://leonid.shevtsov.me Компанія, де він працює: https://railsware.com
Source

Стендап Сьогодні | Надгробки в базах данихОК, ще одна повʼязана ідея, з якою мені чомусь ...

Telegram community logo - Стендап Сьогодні Стендап Сьогодні @stendap_sogodni
512 Views/Reach 2025-12-25 21:38 Message №1426
Надгробки в базах данихОК, ще одна повʼязана ідея, з якою мені чомусь постійно доводиться стикатися останнім часом.Річ у тім, що видалення з бази даних практично ніколи не вивільняє місце запису. Натомість запис помічається як видалений — утворюється так званий надгробок (tombstone). І тільки пізніше, окремою операцією очищення бази це місце буде дійсно вивільнено. Інколи таке очищення відбувається лише вручну... або за певної архітектури взагалі не є можливою.Те ж саме стосується й редагування. Бо найчастіше редагування відбувається через "видалення" попередньої версії та дописування нової. Тим самим у нас теж зʼявляється надгробок. На то є кілька причин — в транзакційній базі головна причина те, що нам все одно треба зберігати й стару версію теж. Так само і в розподіленій базі.От якщо взяти PostgreSQL, то надгробки видаляються операцією VACUUM. Яка може виконуватися й автоматично. Може, а якщо це не налаштовано, то цілком реально опинитися з табличкою, де мертвих записів на порядок більше, ніж живих.В ElasticSearch все складніше; найкращій та рекомендований варіант — це просто видаляти весь застарілий індекс. Бо інакше його доведеться принаймні заморожувати на запис. Тому навіть використовується такий підхід, що оновлені документи пишуться в нові індекси, а не в один.Інколи надгробки є більш... матеріальними, от в CouchDB їх роблять заради синхронізації видалень між вузлами. Та й взагалі будь-де синхронізація вимагає надгробків.А інколи ми робимо їх самі - додаємо поле deleted_at.