Tutorial

Установка и использование TimescaleDB в Ubuntu 18.04

Published on April 9, 2020
Русский
Установка и использование TimescaleDB в Ubuntu 18.04

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

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

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

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

TimescaleDB нет в стандартных репозиториях Ubuntu. Поэтому в этом шаге мы установим ее из PPA (Personal Packages Archive).

Сначала добавьте APT репозиторий TimescaleDB:

  1. sudo add-apt-repository ppa:timescale/timescaledb-ppa

Подтвердите это действие, нажав клавишу ENTER​​​.

Затем обновите свой кэш APT для обновления списка пакетов:

  1. sudo apt update

Теперь вы можете перейти к установке. В этом обучающем руководстве используется версия PostgreSQL 10. Если вы используете другую версию PostgreSQL (например, 9.6 или 11), замените значение в следующей команде и запустите ее:

  1. sudo apt install timescaledb-postgresql-10

Теперь TimescaleDB установлена и готова к использованию. Далее мы включим ее и изменим некоторые настройки в файле конфигурации PostgreSQL для оптимизации базы данных.

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

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

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

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

  1. sudo timescaledb-tune

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

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

Output
shared_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_libraries​​​4​​​, не найдена, сервер базы данных не запустится. Помните об этом при отладке приложений, использующих 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 для запуска процесса настройки:

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

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

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

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 = 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):

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 — это метод регистрации, при котором PostgreSQL регистрирует изменения в файлах данных, прежде чем вносить их в базу данных. Определяя приоритетность записей о последних изменениях данных, 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: /etc/postgresql/10/main/postgresql.conf

В результате вы получите готовый файл конфигурации на /etc/postgresql/10/main/postgresql.conf​​​1​​​.

Примечание. Если вы автоматизируете установку, вам также следует запустить начальную команду с флагами --quiet и --yes, чтобы автоматически применить все рекомендации и внести изменения в файл конфигурации postgresql.conf:

  1. sudo timescaledb-tune --quiet --yes

Чтобы изменения конфигурации вступили в силу, необходимо перезапустить службу PostgreSQL:

  1. sudo systemctl restart postgresql.service

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

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

Мы оптимизировали настройки TimescaleDB и теперь готовы работать с данными временного ряда. TimescaleDB реализуется как расширение PostgreSQL, и поэтому операции с данными временного ряда не будут отличаться от операций в реляционной базе данных. При этом база данных позволит вам свободно объединять данные временного ряда и реляционные таблицы.

Чтобы продемонстрировать это, мы будем использовать команды PostgreSQL для создания базы данных, а затем включим расширение TimescaleDB для создания гипертаблицы, то есть абстракции многих отдельных таблиц более высокого уровня. Гипертаблицы — это основные структуры, с которыми вы будете работать в TimescaleDB.

Войдите в свою базу данных PostgreSQL:

  1. sudo -u postgres psql

Создайте новую базу данных и подключитесь к ней. В этом обучающем руководстве базе данных присвоено имя timeseries:

  1. CREATE DATABASE timeseries;
  2. \c timeseries

Дополнительную информацию о работе с базой данных PostgreSQL можно найти в обучающем руководстве Создание и удаление таблиц и управление ими в PostgreSQL на облачном сервере.

В заключение активируйте расширение TimescaleDB:

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

Создайте таблицу, где будут храниться данные отслеживания температуры и влажности для набора устройств в течение определенного времени:

  1. CREATE TABLE conditions (
  2. time TIMESTAMP WITH TIME ZONE NOT NULL,
  3. device_id TEXT,
  4. temperature NUMERIC,
  5. humidity NUMERIC
  6. );

Эта команда создаст таблицу с именем conditions с четырьмя столбцами. В первом столбце будет храниться значение временной метки, которое включает часовой пояс и не может быть пустым. Далее вы сможете использовать столбец времени для преобразования в гипертаблицу, разделенную по времени:

  1. SELECT create_hypertable('conditions', 'time');

Эта команда вызывает функцию create_hypertable(), которая создает гипертаблицу TimescaleDB из таблицы PostgreSQL, заменяя ее.

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

Output
create_hypertable ------------------------- (1,public,conditions,t) (1 row)

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

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

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

Вначале попробуем использовать базовые команды. Вы можете вставить данные в гипертаблицу, используя стандартную SQL-команду INSERT. Вставьте образцы данных temperature и humidity для теоретического устройства weather-pro-000000 с помощью следующей команды:

  1. INSERT INTO conditions(time, device_id, temperature, humidity)
  2. VALUES (NOW(), 'weather-pro-000000', 84.1, 84.1);

Вывод должен выглядеть так:

Output
INSERT 0 1

Также вы можете вставить несколько строк данных одновременно. Попробуйте следующее:

  1. INSERT INTO conditions
  2. VALUES
  3. (NOW(), 'weather-pro-000002', 71.0, 51.0),
  4. (NOW(), 'weather-pro-000003', 70.5, 50.5),
  5. (NOW(), 'weather-pro-000004', 70.0, 50.2);

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

Output
INSERT 0 3

Также вы можете указать, чтобы команда INSERT возвращала некоторые или все вставленные данные с помощью оператора RETURNING:

  1. INSERT INTO conditions
  2. 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:

  1. DELETE FROM conditions WHERE temperature > 80;
  2. DELETE FROM conditions WHERE humidity > 50;

После операции удаления используйте команду VACUUM, чтобы восстановить пространство, которое все еще используется удаленными данными.

  1. VACUUM conditions;

Дополнительную информацию о команде VACUUM можно найти в документации по PostgreSQL.

Эти команды хорошо подходят для ввода небольших объемов данных, однако поскольку данные временного ряда обычно составляют огромные наборы данных, нам важно понять, как можно сразу вставить в базу данных сотни тысяч строк. Если вы подготовили данные из внешних источников в структурированной форме, например в формате csv, эту задачу можно выполнить очень быстро.

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

Давайте посмотрим, как импортировать данные из образца набора данных weather_small в нашу базу данных. Для начала закройте Postgresql:

  1. \q

Затем загрузите набор данных и извлеките его:

  1. wget https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz
  2. tar -xvzf weather_small.tar.gz

Затем импортируйте данные по температуре и влажности в вашу базу данных:

  1. sudo -u postgres psql -d timeseries -c "\COPY conditions FROM weather_small_conditions.csv CSV"

Команда подключается к базе данных timeseries и запускает команду \COPY, которая копирует данные из выбранного файла в гипертаблицу conditions. Она будет выполняться в течение нескольких секунд.

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

Output
COPY 1000000

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

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

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

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

  1. sudo -u postgres psql -d timeseries

Как указывалось выше, для работы с гипертаблицами можно использовать стандартные команды SQL. Например, чтобы вывести последние 10 записей из гипертаблицы conditions, нужно запустить следующую команду:

  1. 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 записями.

Чтобы увидеть последние записи, нужно отсортировать массив данных по времени в нисходящем порядке:

  1. SELECT * FROM conditions ORDER BY time DESC LIMIT 20;

В результате будут выведены 20 последних записей.

Также мы можем добавить фильтр. Например, чтобы увидеть записи для устройства weather-pro-000000, нужно запустить следующую команду:

  1. SELECT * FROM conditions WHERE device_id = 'weather-pro-000000' ORDER BY time DESC LIMIT 10;

В данном случае мы видим 10 последних точек данных температуры и влажности, записанных устройством weather-pro-000000.

В дополнение к стандартным командам SQL, TimescaleDB также предоставляет ряд специальных функций, полезных для анализа данных временного ряда. Например, чтобы найти медианное значение температуры, мы можем использовать следующий запрос с функцией percentile_cont:

  1. SELECT percentile_cont(0.5)
  2. WITHIN GROUP (ORDER BY temperature)
  3. FROM conditions
  4. WHERE device_id = 'weather-pro-000000';

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

Output
percentile_cont ----------------- 40.5 (1 row)

Так мы увидим медианную температуру за весь период наблюдения для местонахождения датчика weather-pro-00000.

Чтобы показать последние значения для каждого из датчиков, можно использовать функцию last:

  1. select device_id, last(temperature, time)
  2. FROM conditions
  3. GROUP BY device_id;

В результате мы увидим список всех датчиков и последние значения для них.

Чтобы получить первые значения, можно использовать функцию first.

Следующий пример более сложный. В нем будут показаны среднечасовые, минимальные и максимальные значения температуры для выбранного датчика за последние 24 часа:

  1. SELECT time_bucket('1 hour', time) "hour",
  2. trunc(avg(temperature), 2) avg_temp,
  3. trunc(min(temperature), 2) min_temp,
  4. trunc(max(temperature), 2) max_temp
  5. FROM conditions
  6. WHERE device_id = 'weather-pro-000000'
  7. 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.

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

  1. ALTER TABLE conditions SET (
  2. timescaledb.compress,
  3. timescaledb.compress_segmentby = 'device_id'
  4. );

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

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 для сжатия данных за определенный период времени. Например, вы можете запустить следующее:

  1. SELECT add_compress_chunks_policy('conditions', INTERVAL '7 days');

В этом примере данные будут автоматически сжиматься по прошествии недели.

Статистику сжатия данных можно посмотреть с помощью следующей команды:

  1. SELECT *
  2. FROM timescaledb_information.compressed_chunk_stats;

Затем вы увидите список массивов данных со сведениями об их состоянии: статус сжатия и объем в байтах, занимаемый сжатыми и несжатыми данными.

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

  1. SELECT drop_chunks(interval '24 hours', 'conditions');

Этот запрос отбрасывает все массивы из гипертаблицы conditions, содержащие данные, которым больше одного дня.

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

Output
drop_chunks ---------------------------------------- _timescaledb_internal._hyper_1_2_chunk (1 row)

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

Выполните выход из базы данных:

  1. \q

Затем отредактируйте crontab с помощью следующей команды, запускаемой из оболочки:

  1. 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 на вашем сервере 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.

Learn more about us


About the authors

Default avatar

Senior Technical Editor

Editor at DigitalOcean, fiction writer and podcaster elsewhere, always searching for the next good nautical pun!


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel