Автор выбрал 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 на Ubuntu 18.04 и узнаете, как с ней работать.Также вы создадите базы данных временных рядов и сможете отправлять простые запросы. Кроме того, вы узнаете, как избавляться от ненужных данных.
Для данного обучающего руководства вам потребуется следующее:
TimescaleDB нет в стандартных репозиториях Ubuntu. Поэтому в этом шаге мы установим ее из PPA (Personal Packages Archive).
Сначала добавьте APT репозиторий TimescaleDB:
- sudo add-apt-repository ppa:timescale/timescaledb-ppa
Подтвердите это действие, нажав клавишу ENTER
.
Затем обновите свой кэш APT для обновления списка пакетов:
- sudo apt update
Теперь вы можете перейти к установке. В этом обучающем руководстве используется версия PostgreSQL 10. Если вы используете другую версию PostgreSQL (например, 9.6 или 11), замените значение в следующей команде и запустите ее:
- sudo apt install timescaledb-postgresql-10
Теперь TimescaleDB установлена и готова к использованию. Далее мы включим ее и изменим некоторые настройки в файле конфигурации PostgreSQL для оптимизации базы данных.
Модуль TimescaleDB хорошо работает с параметрами конфигурации PostgreSQL по умолчанию, однако для повышения производительности и оптимизации использования ресурсов процессора, памяти и дисков разработчики TimescaleDB рекомендуют настроить некоторые отдельные параметры. Это можно сделать автоматически с помощью инструмента timescaledb-tune
или посредством редактирования файла postgresql.conf
на вашем сервере вручную.
В этом обучающем модуле мы будем использовать инструмент timescaledb-tune
, который прочитает файл postgresql.conf
и предложит внести изменения в интерактивном режиме.
Запустите следующую команду для запуска мастера настройки конфигурации:
- sudo timescaledb-tune
Вначале вам будет предложено подтвердить путь к файлу конфигурации PostgreSQL:
OutputUsing postgresql.conf at this path:
/etc/postgresql/10/main/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.backup201911181111
Далее вам будет предложено изменить переменную shared_preload_libraries
для предварительной загрузки модуля TimescaleDB после запуска сервера PostgreSQL:
Outputshared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ''
Recommended:
shared_preload_libraries = 'timescaledb'
Is this okay? [(y)es/(n)o]:
shared_preload_libraries
принимает список модулей, разделенных запятой в качестве значения, определяющего, какие модули PostgreSQL должны загрузиться перед запуском сервера базы данных. При выполнении этого изменения мы добавим модуль timescaledb
в этот список.
Примечание. Если библиотека, указанная в shared_preload_libraries4
, не найдена, сервер базы данных не запустится. Помните об этом при отладке приложений, использующих shared_preload_libraries
. Дополнительную информацию можно найти в статье PostgresqlCO.NF о shared_preload_libraries
.
Активируйте модуль TimescaleDB, введя y
в данную командную строку, и нажмите ENTER
:
Output...
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.79 GB of available memory and 4 CPUs for PostgreSQL 10
Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 1994MB
effective_cache_size = 5982MB
maintenance_work_mem = 1021001kB
work_mem = 5105kB
Is this okay? [(y)es/(s)kip/(q)uit]:
timescaledb-tune
автоматически обнаружит доступную память сервера и рассчитает рекомендуемые значения для ряда настроек. Например, shared_buffers
определяет объем памяти, выделенной для кэширования данных. По умолчанию этот параметр имеет относительно низкое значение для учета более широкого диапазона платформ, поэтому timescaledb-tune
, вероятно, предложит увеличить значение от 128 МБ
до 1994 МБ
, чтобы более выгодно использовать ресурсы, предоставляя больше места для хранения кэшированной информации, например повторяемых запросов. Также была увеличена переменная work_mem
для более сложной сортировки.
Дополнительную информацию о процедуре настройки параметров памяти PostgreSQL можно найти в статье Отладка сервера PostgreSQL на вики-сайте PostgreSQL.
Введите y
, чтобы принять значения:
Output...
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated
Если в вашем сервере несколько процессоров, вы получите рекомендации по настройке параллельной обработки. Эти параметры определяют, как несколько процессоров могут одновременно выполнять запросы для ускорения сканирования баз данных и возвращения запрошенных данных.
Владельцы многопроцессорных систем получат рекомендации следующего вида:
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 = 13
max_parallel_workers_per_gather = 1
max_parallel_workers = 2
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 — это метод регистрации, при котором PostgreSQL регистрирует изменения в файлах данных, прежде чем вносить их в базу данных. Определяя приоритетность записей о последних изменениях данных, 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: /etc/postgresql/10/main/postgresql.conf
В результате вы получите готовый файл конфигурации на /etc/postgresql/10/main/postgresql.conf
1.
Примечание. Если вы автоматизируете установку, вам также следует запустить начальную команду с флагами --quiet
и --yes
, чтобы автоматически применить все рекомендации и внести изменения в файл конфигурации postgresql.conf
:
- sudo timescaledb-tune --quiet --yes
Чтобы изменения конфигурации вступили в силу, необходимо перезапустить службу PostgreSQL:
- sudo systemctl restart postgresql.service
Теперь база данных работает с оптимальными параметрами и готова к обработке данных временного ряда. На следующих шагах мы попробуем поработать с этими данными. Для этого мы создадим новые базы данных и гипертаблицы и выполним определенные операции.
Мы оптимизировали настройки TimescaleDB и теперь готовы работать с данными временного ряда. TimescaleDB реализуется как расширение PostgreSQL, и поэтому операции с данными временного ряда не будут отличаться от операций в реляционной базе данных. При этом база данных позволит вам свободно объединять данные временного ряда и реляционные таблицы.
Чтобы продемонстрировать это, мы будем использовать команды PostgreSQL для создания базы данных, а затем включим расширение TimescaleDB для создания гипертаблицы, то есть абстракции многих отдельных таблиц более высокого уровня. Гипертаблицы — это основные структуры, с которыми вы будете работать в 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, аналогичные реляционным базам данных.
Вначале попробуем использовать базовые команды. Вы можете вставить данные в гипертаблицу, используя стандартную SQL-команду INSERT
. Вставьте образцы данных 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
Затем загрузите набор данных и извлеките его:
- wget https://timescaledata.blob.core.windows.net/datasets/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 на вашем сервере Ubuntu 18.04. Мы познакомились с созданием гипертаблиц, вставкой в них данных, запросами данных, сжатием и удалением ненужных записей. С помощью этих примеров вы сможете воспользоваться основными преимуществами TimescaleDB перед традиционными реляционными базами данных при хранении данных временного ряда, в том числе:
Теперь, когда вы знаете, как хранить данные временных рядов, вы можете использовать их для создания графиков. TimescaleDB совместима с инструментами визуализации, которые работают с PostgreSQL, например с Grafana. Дополнительную информацию об этом популярном инструменте визуализации можно узнать в руководстве Установка и обеспечение безопасности на Ubuntu 18.04.
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!