Как выполнить массовое обновление базы данных postgres - PullRequest
1 голос
/ 28 декабря 2011

У меня есть база данных Postgres 9.1, которая содержит информацию о погоде.Набор данных состоит приблизительно из 3,1 млн. Строк.

Загрузка данных из файла CSV занимает около 2 минут, а для создания многоколоночного индекса - чуть меньше.

Каждые 6 часов, которые мне нужныполностью обновить набор данных.В настоящее время я думаю, что я бы импортировал новый набор данных в другое имя базы данных, например «weather_imported», и после завершения импорта и создания индекса я бы отбросил исходную базу данных и переименовал импортированную базу данных.

ВТеоретически, клиенты будут продолжать запрашивать базу данных во время этой операции, хотя, если это будет иметь неприятные последствия, я мог бы, вероятно, договориться о том, чтобы клиенты молча игнорировали несколько ошибок.*

Будет ли эта стратегия работать?

Если клиент во время выполнения запроса находился в процессе выполнения запроса, я предполагаю, что база данных не будет завершенасбросить до завершения запроса - верно?

Что если запрос произошел между моментом сброса БД и переименованием?Я предполагаю, что «база данных не найдена».

Есть ли лучшая стратегия?

1 Ответ

0 голосов
/ 28 декабря 2011

Рассмотрим следующую стратегию в качестве альтернативы:

  • Включите поле «версия набора данных» в первичную таблицу.
  • Сохраните «текущую версию набора данных» в каком-то центральном месте,и запишите свои выборки, чтобы искать только те строки, которые имеют текущую версию набора данных.
  • Чтобы обновить набор данных:
    1. Вставьте все данные с новой версией набора данных.(Вы можете просто использовать время начала задания обновления в качестве версии.)
    2. Атомно обновлять «текущую версию набора данных» до значения, которое вы только что вставили.
    3. Удалить все данные со старымиверсии, чем номер версии, который вы только что вставили.

Presto - не нужно перетасовывать базы данных вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...