Автор выбрал Computer History Museum для получения пожертвования в рамках программы Write for DOnations.
Многие приложения, в том числе системы мониторинга и сбора данных, собирают данные для дальнейшего анализа. В процессе этого анализа часто рассматривается то, как элемент данных или система меняется с течением времени. В этих случаях данные представляются в виде временного ряда, где каждая точка данных сопровождается временной меткой. Пример будет выглядеть следующим образом:
2019-11-01 09:00:00 server.cpu.1 0.9
2019-11-01 09:00:00 server.cpu.15 0.8
2019-11-01 09:01:00 server.cpu.1 0.9
2019-11-01 09:01:00 server.cpu.15 0.8
...
Актуальность данных временного ряда в последнее время выросла за счет внедрения множества новых решений Интернета вещей (IoT) и промышленного Интернета вещей. Все больше устройств собирают различную информацию с временным рядом. В их число входят фитнес-трекеры, смарт-часы, домашние метеостанции, разнообразные датчики и многие другие устройства. Они собирают огромные объемы информации, и все эти данные необходимо где-то хранить.
Классические реляционные базы данных чаще всего используются для хранения данных, но они не всегда пригодны для хранения больших объемов данных временного ряда. Когда возникает необходимость обработки большого объема данных временного ряда, реляционные базы данных могут оказаться слишком медленными. Чтобы избежать проблем с реляционными базами данных, были созданы специально оптимизированные базы данных, называемые базами данных NoSQL.
TimescaleDB — база данных с открытым исходным кодом, оптимизированная для хранения данных временного ряда. Она реализуется как расширение PostgreSQL и сочетает в себе удобство реляционных баз данных и быстродействие баз данных NoSQL. Таким образом, она позволяет использовать PostgreSQL для хранения бизнес-данных и данных временного ряда в одном месте.
В этом обучающем руководстве мы установим TimescaleDB в CentOS 7, настроим ее и научимся с ней работать. Вы создадите базы данных временного ряда и составите простые запросы к ним. В заключение вы научитесь удалять ненужные данные.
Для данного обучающего руководства вам потребуется следующее:
firewalld
. Чтобы настроить firewalld
, следуйте указаниям раздела «Настройка базового брандмауэра» в обучающем руководстве Дополнительные рекомендуемые шаги для новых серверов CentOS 7.TimescaleDB не входит в репозитории пакетов CentOS по умолчанию, так что на этом шаге вы выполните установку из стороннего репозитория TimescaleDB.
Для начала создайте новый файл репозитория:
- sudo vi /etc/yum.repos.d/timescaledb.repo
Войдите в режим вставки, нажав клавишу i
, и вставьте в файл следующую конфигурацию:
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
После завершения нажмите ESC
для выхода из режима вставки, а затем введите :wq
и нажмите ENTER
для сохранения файла и выхода. Чтобы узнать больше о текстовом редакторе vi и его преемнике vim, ознакомьтесь с обучающим руководством Установка и использование текстового редактора Vim на облачном сервере.
Теперь вы можете перейти к установке. В этом обучающем руководстве используется версия PostgreSQL 11. Если вы используете другую версию PostgreSQL (например, 9.6 или 11), замените значение в следующей команде и запустите ее:
- sudo yum install -y timescaledb-postgresql-11
Теперь TimescaleDB установлена и готова к использованию. Далее мы включим ее и изменим некоторые настройки в файле конфигурации PostgreSQL для оптимизации базы данных.
Модуль TimescaleDB хорошо работает с параметрами конфигурации PostgreSQL по умолчанию, однако для повышения производительности и оптимизации использования ресурсов процессора, памяти и дисков разработчики TimescaleDB рекомендуют настроить некоторые отдельные параметры. Это можно сделать автоматически с помощью инструмента timescaledb-tune
или посредством редактирования файла postgresql.conf
на вашем сервере вручную.
В этом обучающем руководстве мы будем использовать инструмент timescaledb-tune
. Он считывает файл postgresql.conf
и интерактивно предлагает внести в него изменения.
Запустите следующую команду для запуска мастера настройки конфигурации:
- sudo timescaledb-tune --pg-config=/usr/pgsql-11/bin/pg_config
Вначале вам будет предложено подтвердить путь к файлу конфигурации PostgreSQL:
OutputUsing postgresql.conf at this path:
/var/lib/pgsql/11/data/postgresql.conf
Is this correct? [(y)es/(n)o]:
Программа автоматически определяет путь к файлу конфигурации, и для его подтверждения нужно ввести y
:
Output...
Is this correct? [(y)es/(n)o]: y
Writing backup to:
/tmp/timescaledb_tune.backup201912191633
Активируйте модуль TimescaleDB, введя y
в следующей командной строке, а затем нажмите ENTER
:
Outputshared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ''
Recommended:
shared_preload_libraries = 'timescaledb'
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated
Вам будет предложено изменить настройки на основе характеристик вашего сервера и версии PostgreSQL. Нажмите y
для запуска процесса настройки:
OutputTune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 7.64 GB of available memory and 4 CPUs for PostgreSQL 11
Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 1955MB
effective_cache_size = 5865MB
maintenance_work_mem = 1001121kB
work_mem = 5005kB
Is this okay? [(y)es/(s)kip/(q)uit]:
timescaledb-tune
автоматически определяет доступный объем памяти сервера и рассчитывает рекомендуемые значения для параметров shared_buffers
, effective_cache_size
, maintenance_work_mem
и work_mem
. Если вы хотите узнать об этом больше, откройте страницу GitHub для инструмента timescaledb-tune
.
Если параметры выглядят нормально, введите y
:
Output...
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated
Если в вашем сервере несколько процессоров, вы получите рекомендации по настройке параллельной обработки. Если же у вас только один процессор, timescaledb-tune
напрямую отправит вас к настройке параметров WAL.
Владельцы многопроцессорных систем получат рекомендации следующего вида:
OutputParallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 15
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
Is this okay? [(y)es/(s)kip/(q)uit]:
Эти параметры регулируют количество рабочих модулей, которые обрабатывают запросы и фоновые задачи. Дополнительную информацию об этих параметрах можно найти в документации по TimescaleDB и PostgreSQL.
Введите y
и нажмите ENTER
, чтобы принять эти настройки:
Output...
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: parallelism settings will be updated
Далее вы найдете рекомендации по настройке журнала предварительной записи (WAL):
OutputWAL settings recommendations
Current:
#wal_buffers = -1
#min_wal_size = 80MB
#max_wal_size = 1GB
Recommended:
wal_buffers = 16MB
min_wal_size = 4GB
max_wal_size = 8GB
Is this okay? [(y)es/(s)kip/(q)uit]:
WAL обеспечивает сохранение целостности данных, но при настройках по умолчанию может наблюдаться низкая эффективность ввода/вывода, в результате которой замедляется производительность записи. Введите y
для оптимизации этих параметров:
Output...
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: WAL settings will be updated
Далее вы получите ряд случайных рекомендаций:
OutputMiscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.5
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_locks_per_transaction = 64
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 200
Is this okay? [(y)es/(s)kip/(q)uit]:
Все эти разнообразные параметры предназначены для повышения производительности. Например, твердотельные накопители могут одновременно обрабатывать огромное количество запросов, так что оптимальное значение параметра effective_io_concurrency
должно составлять несколько сотен. Дополнительную информацию об этих параметрах можно найти в документации по PostgreSQL.
Нажмите y
, а затем нажмите ENTER
, чтобы продолжить.
Output...
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: miscellaneous settings will be updated
Saving changes to: /var/lib/pgsql/11/data/postgresql.conf
В результате вы получите готовый файл конфигурации /var/lib/pgsql/11/data/postgresql.conf
.
Примечание. Если вы производите установку с нуля, вам также следует запустить начальную команду с флагами --quiet
и --yes
, чтобы автоматически применить все рекомендации и внести изменения в файл конфигурации postgresql.conf
:
- sudo timescaledb-tune --pg-config=/usr/pgsql-11/bin/pg_config --quiet --yes
Чтобы изменения конфигурации вступили в силу, необходимо перезапустить службу PostgreSQL:
- sudo systemctl restart postgresql-11.service
Теперь база данных работает с оптимальными параметрами и готова к обработке данных временного ряда. На следующих шагах мы попробуем поработать с этими данными. Для этого мы создадим новые базы данных и гипертаблицы и выполним определенные операции.
Мы оптимизировали настройки TimescaleDB и теперь готовы работать с данными временного ряда. TimescaleDB реализуется как расширение PostgreSQL, и поэтому операции с данными временного ряда не будут отличаться от операций в реляционной базе данных. При этом база данных позволит вам свободно объединять данные временного ряда и реляционные таблицы.
Вначале вы создадите новую базу данных и включите для нее расширение TimescaleDB. Войдите в базу данных PostgreSQL:
- sudo -u postgres psql
Создайте новую базу данных и подключитесь к ней. В этом обучающем руководстве базе данных присвоено имя timeseries
:
- CREATE DATABASE timeseries;
- \c timeseries
Дополнительную информацию о работе с базой данных PostgreSQL можно найти в обучающем руководстве Создание и удаление таблиц и управление ими в PostgreSQL на облачном сервере.
В заключение активируйте расширение TimescaleDB:
- CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Результат будет выглядеть следующим образом:
OutputWARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 1.5.1
For more information on TimescaleDB, please visit the following links:
1. Getting started: https://docs.timescale.com/getting-started
2. API reference documentation: https://docs.timescale.com/api
3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture
Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry.
CREATE EXTENSION
Основное взаимодействие с данными временного ряда осуществляется через гипертаблицы. Они представляют собой абстракцию множества отдельных таблиц с массивами данных.
Чтобы создать гипертаблицу, создайте обычную таблицу SQL и конвертируйте ее в гипертаблицу с помощью функции create_hypertable
.
Создайте таблицу, где будут храниться данные отслеживания температуры и влажности для набора устройств в течение определенного времени:
- CREATE TABLE conditions (
- time TIMESTAMP WITH TIME ZONE NOT NULL,
- device_id TEXT,
- temperature NUMERIC,
- humidity NUMERIC
- );
Эта команда создаст таблицу conditions
с четырьмя столбцами. В первом столбце будет храниться значение временной метки, которое включает часовой пояс и не может быть пустым. Далее вы сможете использовать столбец времени для преобразования в гипертаблицу, разделенную по времени:
- SELECT create_hypertable('conditions', 'time');
Эта команда вызывает функцию create_hypertable()
, которая создает гипертаблицу TimescaleDB из таблицы PostgreSQL, заменяя ее.
Результат будет выглядеть следующим образом:
Output create_hypertable
-------------------------
(1,public,conditions,t)
(1 row)
На этом шаге мы создали новую гипертаблицу для хранения данных временного ряда. Теперь мы можем заполнить ее данными, выполнив запись в гипертаблицу, после чего произведем ее удаление.
На этом шаге мы выполним вставку данных с помощью стандартных команд SQL и импортируем большие наборы данных из внешних источников. Так вы увидите аспекты TimescaleDB, аналогичные реляционным базам данных.
Вначале попробуем использовать базовые команды. Данные можно вставлять в гипертаблицу с помощью стандартной команды INSERT
SQL. Вставьте образцы данных temperature
и humidity
для теоретического устройства weather-pro-000000
с помощью следующей команды:
- INSERT INTO conditions(time, device_id, temperature, humidity)
- VALUES (NOW(), 'weather-pro-000000', 84.1, 84.1);
Результат будет выглядеть следующим образом:
OutputINSERT 0 1
Также вы можете вставить несколько строк данных одновременно. Попробуйте следующее:
- INSERT INTO conditions
- VALUES
- (NOW(), 'weather-pro-000002', 71.0, 51.0),
- (NOW(), 'weather-pro-000003', 70.5, 50.5),
- (NOW(), 'weather-pro-000004', 70.0, 50.2);
Вы получите следующий результат:
OutputINSERT 0 3
Также вы можете указать, чтобы команда INSERT
возвращала некоторые или все вставленные данные с помощью оператора RETURNING
:
- INSERT INTO conditions
- VALUES (NOW(), 'weather-pro-000002', 70.1, 50.1) RETURNING *;
Результат будет выглядеть следующим образом:
Output time | device_id | temperature | humidity
-------------------------------+--------------------+-------------+----------
2019-09-15 14:14:01.576651+00 | weather-pro-000002 | 70.1 | 50.1
(1 row)
Если вы хотите удалить данные из гипертаблицы, используйте стандартную команду DELETE
SQL. Запустите следующую команду для удаления всех данных, где temperature
составляет более 80
или humidity
составляет более 50
:
- DELETE FROM conditions WHERE temperature > 80;
- DELETE FROM conditions WHERE humidity > 50;
После операции удаления рекомендуется использовать команду VACUUM
, которая очистит пространство, используемое удаленными данными.
- VACUUM conditions;
Дополнительную информацию о команде VACUUM
можно найти в документации по PostgreSQL.
Эти команды хорошо подходят для ввода небольших объемов данных, однако поскольку данные временного ряда обычно составляют огромные наборы данных, нам важно понять, как можно сразу вставить в базу данных сотни тысяч строк. Если вы подготовили данные из внешних источников в структурированной форме, например в формате csv, эту задачу можно выполнить очень быстро.
Для проверки мы используем образец набора данных по температуре и влажности из разных точек. Он был создан разработчиками TimescaleDB, чтобы облегчить тестирование базы данных. Дополнительную информацию об образцах наборов данных можно найти в документации по TimescaleDB.
Давайте посмотрим, как импортировать данные из образца набора данных weather_small
в нашу базу данных. Для начала закройте Postgresql:
- \q
Затем загрузите набор данных и извлеките его:
- cd /tmp
- curl https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz -o weather_small.tar.gz
- tar -xvzf weather_small.tar.gz
Затем импортируйте данные по температуре и влажности в вашу базу данных:
- sudo -u postgres psql -d timeseries -c "\COPY conditions FROM weather_small_conditions.csv CSV"
Команда подключается к базе данных timeseries
и запускает команду \COPY
, которая копирует данные из выбранного файла в гипертаблицу conditions
. Она будет выполняться в течение нескольких секунд.
Когда данные будут введены в таблицу, вы увидите следующий результат:
OutputCOPY 1000000
На этом шаге мы добавили данные в гипертаблицу вручную и в пакетном режиме. Теперь мы перейдем к выполнению запросов.
Теперь наша таблица содержит данные, и мы можем отправлять различные запросы для их анализа.
Для начала выполним вход в базу данных:
- sudo -u postgres psql -d timeseries
Как указывалось выше, для работы с гипертаблицами можно использовать стандартные команды SQL. Например, чтобы вывести последние 10 записей из гипертаблицы conditions
, нужно запустить следующую команду:
- SELECT * FROM conditions LIMIT 10;
Результат будет выглядеть следующим образом:
Output time | device_id | temperature | humidity
------------------------+--------------------+--------------------+----------
2016-11-15 12:00:00+00 | weather-pro-000000 | 39.9 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000001 | 32.4 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000002 | 39.800000000000004 | 50.2
2016-11-15 12:00:00+00 | weather-pro-000003 | 36.800000000000004 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000004 | 71.8 | 50.1
2016-11-15 12:00:00+00 | weather-pro-000005 | 71.8 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000006 | 37 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000007 | 72 | 50
2016-11-15 12:00:00+00 | weather-pro-000008 | 31.3 | 50
2016-11-15 12:00:00+00 | weather-pro-000009 | 84.4 | 87.8
(10 rows)
Эта команда позволяет посмотреть, какие данные содержатся в базе данных. Поскольку база данных содержит миллион записей, мы используем LIMIT 10
для ограничения вывода 10 записями.
Чтобы увидеть последние записи, нужно отсортировать массив данных по времени в нисходящем порядке:
- SELECT * FROM conditions ORDER BY time DESC LIMIT 20;
В результате будут выведены 20 последних записей.
Также мы можем добавить фильтр. Например, чтобы увидеть записи для устройства weather-pro-000000
, нужно запустить следующую команду:
- SELECT * FROM conditions WHERE device_id = 'weather-pro-000000' ORDER BY time DESC LIMIT 10;
В данном случае мы видим 10 последних точек данных температуры и влажности, записанных устройством weather-pro-000000
.
В дополнение к стандартным командам SQL, TimescaleDB также предоставляет ряд специальных функций, полезных для анализа данных временного ряда. Например, чтобы найти медианное значение температуры, мы можем использовать следующий запрос с функцией percentile_cont
:
- SELECT percentile_cont(0.5)
- WITHIN GROUP (ORDER BY temperature)
- FROM conditions
- WHERE device_id = 'weather-pro-000000';
Результат будет выглядеть следующим образом:
Output percentile_cont
-----------------
40.5
(1 row)
Так мы увидим медианную температуру за весь период наблюдения для местонахождения датчика weather-pro-00000
.
Чтобы показать последние значения для каждого из датчиков, можно использовать функцию last
:
- select device_id, last(temperature, time)
- FROM conditions
- GROUP BY device_id;
В результате мы увидим список всех датчиков и последние значения для них.
Чтобы получить первые значения, можно использовать функцию first
.
Следующий пример более сложный. В нем будут показаны среднечасовые, минимальные и максимальные значения температуры для выбранного датчика за последние 24 часа:
- SELECT time_bucket('1 hour', time) "hour",
- trunc(avg(temperature), 2) avg_temp,
- trunc(min(temperature), 2) min_temp,
- trunc(max(temperature), 2) max_temp
- FROM conditions
- WHERE device_id = 'weather-pro-000000'
- GROUP BY "hour" ORDER BY "hour" DESC LIMIT 24;
Здесь мы использовали функцию time_bucket
, выступающую в качестве более мощной версии функции PostgreSQL date_trunc
. В результате вы увидите, в какие периоды дня температура поднимается или опускается:
Output hour | avg_temp | min_temp | max_temp
------------------------+----------+----------+----------
2016-11-16 21:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-16 20:00:00+00 | 41.92 | 41.69 | 42.00
2016-11-16 19:00:00+00 | 41.07 | 40.59 | 41.59
2016-11-16 18:00:00+00 | 40.11 | 39.79 | 40.59
2016-11-16 17:00:00+00 | 39.46 | 38.99 | 39.79
2016-11-16 16:00:00+00 | 38.54 | 38.19 | 38.99
2016-11-16 15:00:00+00 | 37.56 | 37.09 | 38.09
2016-11-16 14:00:00+00 | 36.62 | 36.39 | 37.09
2016-11-16 13:00:00+00 | 35.59 | 34.79 | 36.29
2016-11-16 12:00:00+00 | 34.59 | 34.19 | 34.79
2016-11-16 11:00:00+00 | 33.94 | 33.49 | 34.19
2016-11-16 10:00:00+00 | 33.27 | 32.79 | 33.39
2016-11-16 09:00:00+00 | 33.37 | 32.69 | 34.09
2016-11-16 08:00:00+00 | 34.94 | 34.19 | 35.49
2016-11-16 07:00:00+00 | 36.12 | 35.49 | 36.69
2016-11-16 06:00:00+00 | 37.02 | 36.69 | 37.49
2016-11-16 05:00:00+00 | 38.05 | 37.49 | 38.39
2016-11-16 04:00:00+00 | 38.71 | 38.39 | 39.19
2016-11-16 03:00:00+00 | 39.72 | 39.19 | 40.19
2016-11-16 02:00:00+00 | 40.67 | 40.29 | 40.99
2016-11-16 01:00:00+00 | 41.63 | 40.99 | 42.00
2016-11-16 00:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 23:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 22:00:00+00 | 42.00 | 42.00 | 42.00
(24 rows)
Дополнительные полезные функции можно найти в документации по TimescaleDB.
Теперь мы узнали, как обрабатывать данные. Далее мы рассмотрим удаление ненужных данных и сжатие данных.
По мере накопления данных они занимают все больше места на жестком диске. Для экономии места в последней версии TimescaleDB имеется функция сжатия данных. Данная функция не требует модификации параметров файловой системы, и ее можно использовать для быстрого повышения эффективности вашей базы данных. Дополнительную информацию о принципах работы сжатия можно найти в этой статье о сжатии в TimescaleDB.
Для начала нужно включить сжатие гипертаблицы:
- ALTER TABLE conditions SET (
- timescaledb.compress,
- timescaledb.compress_segmentby = 'device_id'
- );
Вы получите следующие данные:
OutputNOTICE: adding index _compressed_hypertable_2_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_2 USING BTREE(device_id, _ts_meta_sequence_num)
ALTER TABLE
Примечание. Также вы можете настроить TimescaleDB для сжатия данных за определенный период времени. Например, вы можете запустить следующее:
- SELECT add_compress_chunks_policy('conditions', INTERVAL '7 days');
В этом примере данные будут автоматически сжиматься по прошествии недели.
Статистику сжатия данных можно посмотреть с помощью следующей команды:
- SELECT *
- FROM timescaledb_information.compressed_chunk_stats;
Затем вы увидите список массивов данных со сведениями об их состоянии: статус сжатия и объем в байтах, занимаемый сжатыми и несжатыми данными.
Если данные не нужно хранить в течение длительного времени, устаревшие данные можно удалять для освобождения свободного пространства. Для этого предназначена специальная функция drop_chunks
. Она позволяет удалять массивы с данными, возраст которых превышает заданный:
- SELECT drop_chunks(interval '24 hours', 'conditions');
Этот запрос отбрасывает все массивы из гипертаблицы conditions
, содержащие данные, которым больше одного дня.
Результат будет выглядеть следующим образом:
Output drop_chunks
----------------------------------------
_timescaledb_internal._hyper_1_2_chunk
(1 row)
Для автоматического удаления старых данных можно настроить задачу cron
. Дополнительную информацию по использованию cron
для автоматизации системных задач можно найти в нашем обучающем руководстве.
Выполните выход из базы данных:
- \q
Затем отредактируйте crontab
с помощью следующей команды, запускаемой из оболочки:
- crontab -e
Добавьте в конец файла следующую строку:
...
0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c "SELECT drop_chunks(interval '24 hours', 'conditions');" >/dev/null 2>&1
Это задание удаляет данные старше одного дня ежедневно в 1:00.
Мы настроили TimescaleDB на сервере CentOS. Мы познакомились с созданием гипертаблиц, вставкой в них данных, запросами данных, сжатием и удалением ненужных записей. С помощью этих примеров вы сможете воспользоваться основными преимуществами TimescaleDB перед традиционными реляционными базами данных при хранении данных временного ряда, в том числе:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!