Автор выбрал 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, настроим ее и научимся с ней работать. Вы создадите базы данных временного ряда и составите простые запросы к ним. В заключение вы научитесь удалять ненужные данные.

Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

Шаг 1 — Установка TimescaleDB

TimescaleDB не входит в репозитории пакетов CentOS по умолчанию, так что на этом шаге вы выполните установку из стороннего репозитория TimescaleDB.

Для начала создайте новый файл репозитория:

  • sudo vi /etc/yum.repos.d/timescaledb.repo

Войдите в режим вставки, нажав клавишу i, и вставьте в файл следующую конфигурацию:

/etc/yum.repos.d/timescaledb.repo
[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 для оптимизации базы данных.

Шаг 2 — Настройка TimescaleDB

Модуль TimescaleDB хорошо работает с параметрами конфигурации PostgreSQL по умолчанию, однако для повышения производительности и оптимизации использования ресурсов процессора, памяти и дисков разработчики TimescaleDB рекомендуют настроить некоторые отдельные параметры. Это можно сделать автоматически с помощью инструмента timescaledb-tune или посредством редактирования файла postgresql.conf на вашем сервере вручную.

В этом обучающем руководстве мы будем использовать инструмент timescaledb-tune. Он считывает файл postgresql.conf и интерактивно предлагает внести в него изменения.

Запустите следующую команду для запуска мастера настройки конфигурации:

  • sudo timescaledb-tune --pg-config=/usr/pgsql-11/bin/pg_config

Вначале вам будет предложено подтвердить путь к файлу конфигурации PostgreSQL:

Output
Using 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:

Output
shared_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 для запуска процесса настройки:

Output
Tune 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.

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

Output
Parallelism 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):

Output
WAL 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

Далее вы получите ряд случайных рекомендаций:

Output
Miscellaneous 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

Теперь база данных работает с оптимальными параметрами и готова к обработке данных временного ряда. На следующих шагах мы попробуем поработать с этими данными. Для этого мы создадим новые базы данных и гипертаблицы и выполним определенные операции.

Шаг 3 — Создание новой базы данных и гипертаблицы

Мы оптимизировали настройки 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;

Результат будет выглядеть следующим образом:

Output
WARNING: 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)

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

Шаг 4 — Запись и удаление данных

На этом шаге мы выполним вставку данных с помощью стандартных команд 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);

Результат будет выглядеть следующим образом:

Output
INSERT 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);

Вы получите следующий результат:

Output
INSERT 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. Она будет выполняться в течение нескольких секунд.

Когда данные будут введены в таблицу, вы увидите следующий результат:

Output
COPY 1000000

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

Шаг 5 — Отправка запросов данных

Теперь наша таблица содержит данные, и мы можем отправлять различные запросы для их анализа.

Для начала выполним вход в базу данных:

  • 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.

Теперь мы узнали, как обрабатывать данные. Далее мы рассмотрим удаление ненужных данных и сжатие данных.

Шаг 6 — Настройка сжатия и удаления данных

По мере накопления данных они занимают все больше места на жестком диске. Для экономии места в последней версии TimescaleDB имеется функция сжатия данных. Данная функция не требует модификации параметров файловой системы, и ее можно использовать для быстрого повышения эффективности вашей базы данных. Дополнительную информацию о принципах работы сжатия можно найти в этой статье о сжатии в TimescaleDB.

Для начала нужно включить сжатие гипертаблицы:

  • ALTER TABLE conditions SET (
  • timescaledb.compress,
  • timescaledb.compress_segmentby = 'device_id'
  • );

Вы получите следующие данные:

Output
NOTICE: 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

Добавьте в конец файла следующую строку:

crontab
...

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 перед традиционными реляционными базами данных при хранении данных временного ряда, в том числе:

  • Повышенная скорость обработки данных
  • Более быстрое выполнение запросов
  • Функции, связанные с временем

0 Comments

Creative Commons License