Оптимизация производительности для СУБД только для вставок с запросами

У нас есть postgres db с плагином timescaledb для хранения данных датчиков на основе времени в гигабайтах и ​​постоянно растет. В БД есть две таблицы с индексами, внешними ключами и всем, что касается классической БД для базы данных клиентов или чего-то еще. Вопрос в том, какие существуют варианты производительности, позволяющие повысить производительность вставки и производительность запросов.

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

Таблица данных датчика имеет внешний ключ к таблице идентификатора датчика и указатель на идентификатор датчика и время.

Вставки происходят очень часто со многих тысяч устройств каждую секунду. Так что производительность вставки важна. Данные датчика никогда не меняются, и удаление не происходит, кроме как для очистки старых данных. Немногие пользователи время от времени выполняют запросы для исследования данных датчика. Приложение периодически выполняет запросы, чтобы выяснить, изменились ли текущие и предыдущие данные датчика.

Теперь вопрос в том, как оптимизировать базу данных для этого варианта использования. Одна идея состоит в том, чтобы удалить внешние ключи, чтобы улучшить производительность вставки. Я не уверен, действительно ли это не влияет на производительность запросов или в какой степени. База данных датчиков имеет уникальное ключевое ограничение на идентификатор датчика и время. Проблема в том, что существующие индексы необходимы для запросов и, следовательно, не могут быть удалены.

Любые идеи оценили, как настроить вещи для этого сценария.

0 ответов

Другие вопросы по тегам