Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!05.04.2024
Як гарантувати імпорт в базу без дублікатів
Є така задача — завантажувати пакети даних в базу. Пакет складається з декількох частин. Інколи програма буде ламатися посередині (а яка не буде?); нам потрібно гарантувати, що жодний пакет не буде пропущений та в базі не зʼявляться дублікати.
-
☑️ Можна зробити окрему табличку чекпойнтів, в який записувати ті пакети, які збереглися повністю. Тоді під час запуску наступного імпорту мусимо перевірити, чи є в базі дані з неповних пакетів, та якщо є — видаляти їх. Мінус: не у всіх випадках можна знайти та видалити дані.
-
💕 Можна створювати нову таблицю на кожний запуск імпорту, та атомарно копіювати дані за закінчення імпорту. Зазвичай, але не завжди, копіювання всередині бази робиться легко. Принаймні якщо дані в одній таблиці. Неповні таблиці просто видаляємо.
-
💼 А можна згадати, що в базі є транзакції, та вони здатні не тільки гарантувати цілісність подвійної бухгалтерії. В PostgreSQL, наприклад, взагалі немає обмеження на довжину транзакції. А якщо транзакція не буде завершена, то рядки з неї технічно автоматично стануть видаленими. З мінусів — транзакція буде обмежена поточною сесією.