Импорт, экспорт и обновление данных

Архитектурные подходы использования чужих данных бывают разные, рассмотрим некоторые из них.

Импорт

Представим ситуацию, когда наше приложение генерирует или получает данные из стороннего приложения

Поле версии

Подход реализуется добавлением в таблицу поля с версией данных, в результате стратегия обновление данных выглядит так:

  • при старте находим последнюю версию
  • создаем в памяти новую версию (последняя версия + один)
  • прокидываем новую версию в место, где добавляются записи в таблицу table_name
  • сообщаем приложению, что теперь актуальная версия данных = новая версия
  • в конце успешной работы удаляем неактуальные данные

Минусы:

  • увеличение таблицы table_name в 2 раза в момент обновления данных в ней
  • появление блокировок на таблице table_name при появлении новых данных и удалении старых данных
  • увеличение индексов в таблице table_name что может сказаться на скорости работы приложения
  • требует место (например таблица со строкой), где хранится актуальная версия данных

Итог: это отличный подход, когда нет возможности обновить таблицу полностью (когда есть возможность обновлять таблицу частями).

Переименование таблиц

Подход реализуется созданием новой таблицы table_name_tmp, заполнением ее, подмена текущей таблицы на новую. 

  • TRUNCATE table_name_tmp;
  • заполняем данными таблицу table_name_tmp
  • ALTER TABLE table_name RENAME TO table_name_old;
  • ALTER TABLE table_name_tmp RENAME TO table_name;
  • ALTER TABLE table_name_old RENAME TO table_name_tmp;

Можно применить оптимизацию: перед заполнением table_name_tmp отключить индексы и констрейнты, после заполнения - включить.

Плюсы:

  • в два раза меньше индексы в таблицы
  • перестраивать индексы можно один раз - только в конце выполнения обновления данных
  • одномоментное переключение без доп. таблиц хранения версии
  • одна реальная версия данных в таблице - проще понимать
  • по коду тоже проще - нет никакой работы с версиями
  • удаление - достаточно грохнуть временную таблицу

Минусы:

  • дополнительная временная таблица (в которой образуются новые данные)

Итог: это отличный подход, когда есть возможность полностью обновить таблицу, т.к. проще чем подход "Поле версии".


11.09.2021 07:08

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru