Как удалить самые старые записи из удаленного TimescaleDb, поддерживая полную локальную резервную копию базы данных? - PullRequest
1 голос
/ 26 января 2020

У меня есть удаленная постоянно растущая база данных TimescaleDb. Я хотел бы сохранить только самые последние записи в этой базе данных, сохраняя оставшиеся данные на локальном диске, для достижения постоянного размера базы данных на сервере.

Я думал о создании полных pg_dump резервных копий перед сохранением и восстановлением базы локально из этих резервных копий.

Кроме того, я мог бы использовать WAL-E для создания непрерывной копии, каким-то образом игнорируя удаления в удаленной базе данных.

Что будет самый эффективный способ добиться этого?

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Итак, я решил перенести старый блок данных по фрагменту.

Сначала я SELECT show_chunks(older_than => interval '1 day'); определил, какие фрагменты могут быть сохранены.

Далее я итерирую с \copy _timescaledb_internal.name_of_the_chunk_n to 'chunk_n.csv' csv по выбранным фрагментам. После этого я использую rsync для перемещения резервных копий csv на локальный диск.

Наконец, я установил поверхностную копию удаленной базы данных (вручную, осознавая ошибку ) и используйте timescaledb-parallel-copy -skip-header --db-name db_name --table table_name --file /path/to/chunk_n --workers 2 --reporting-period 10s для вставки данных в локальную базу данных.

0 голосов
/ 26 января 2020

(здесь TimescaleDB)

Здесь есть два основных подхода:

  • Используйте систему резервного копирования, такую ​​как WAL-E или pgBackRest, для непрерывной репликации данных в какой-либо другой источник (например, S3).
  • Интегрируйте использование TimescaleDB drop_chunks с процессом извлечения данных.

Ответ в некоторой степени зависит от сложности ваших данных / базы данных.

Если вы ищете для первичного архивирования ваших данных в одной гипертабельной таблице, я бы порекомендовал последнее: используйте show_chunks, чтобы определить, какие чанки находятся в определенном диапазоне, вычислить выборку по их диапазону и записать данные где бы то ни было, а затем выполните drop_chunks в том же диапазоне.

...