PostgreSQL - хранит в реальном времени данные нескольких субъектов - PullRequest
0 голосов
/ 25 сентября 2018

Сценарий:

  1. Я пытаюсь создать веб-страницу мониторинга в реальном времени для операций на корабле
  2. У меня работает 1000 - 10000 кораблей
  3. Все кораблиотправка данных в реальном времени в БД, 24 часа - в течение 30 дней
  4. Каждые новые вставленные данные имеют размер 1 строка X 100 столбец
  5. При загрузке веб-страницы все исторические данныевыбранный корабль будет извлечен и визуализирован
  6. Будет запрошена последняя строка таблицы данных корабля в реальном времени, которая будет выбрана на веб-странице для обновления экрана реального времени
  7. Каждый корабль имеет свой собственный- данные в реальном времени, такие как размеры корабля, груз, обслуживающий персонал и т. д. *

До сих пор я думал о создании новой схемы для каждого корабля.Примерно так:

public_schema
ship1_schema
ship2_schema
ship3_schema
  |--- realtime_table
  |--- cargo_table
  |--- dimensions_table
  |--- attendants_table
ship4_schema
ship5_schme

Является ли это хорошим способом хранения данных в реальном времени с отдельного корабля и загрузки их на веб-сервер?Какие еще способы вы бы порекомендовали?

Для временного ряда я уже использую расширение PostgreSQL под названием Timescale DB.Мой вопрос скорее о хранении данных временных рядов, если у меня много кораблей.Является ли хорошей идеей дифференцировать данные RT каждого корабля, когда я создаю новую схему?

++ Я довольно новичок в PostgreSQL, и некоторые из советов, которые я получил от других людей, были слишком сложными для меня ..Я был бы очень признателен, если вы предложите какой-то метод, кратко объясните, что это такое

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

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

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

0 голосов
/ 25 сентября 2018

Лично мне кажется, что это неправильный способ работы.В этом случае у меня будут все данные о корабле в одной таблице, и с этого момента я включу идентификатор корабля в

  • realtime_table
  • cargo_table
  • sizes_table
  • Participants_table

С этого момента, если вы считаете, что ваши данные достигнут большого объема, у вас есть следующие варианты:

  1. Создание индексов наПоля, которые важны для запроса, для этого очень удобен планировщик запросов Postgres.

  2. В последних версиях Postgres реализована таблица разбиение на основе предоставленных вами критериев без необходимости использования таблицынаследование. **

Поскольку вам понадобятся оперативные данные на веб-странице, вы можете использовать команду Listen для Postgres для получения данных с корабля (если толькоу вас есть другой способ отправки этих данных на веб-сервер, например, веб-сокеты)

...