PostgreSQL - 存储多个主题的实时数据

PostgreSQL - store real-time data of multiple subjects

场景:

  1. 我正在尝试为船舶操作建立一个实时监控网页
  2. 我有 1,000 - 10,000 艘船在运营
  3. 所有船只都在向 DB 发送实时数据,24 小时 - 30 天
  4. 插入的每个新数据的维度为 1 行 X 100 列
  5. 加载网页时,将获取并显示所选船舶的所有历史数据
  6. 最后一行船舶实时数据table将被查询,并在网页上抓取以更新实时屏幕
  7. 每艘船都有自己的非实时数据,例如船舶尺寸、货物、服务员等...

到目前为止,我一直在考虑为每艘船创建一个新模式。像这样:

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

这是存储单艘船实时数据并在网络服务器上获取它们的好方法吗?您还会推荐哪些其他方式?

对于时间序列,我已经在使用一个名为 Timescale DB 的 PostgreSQL 扩展。我的问题是关于存储时间序列数据,以防我有很多船。在构建新模式时区分每艘船的 RT 数据是个好主意吗?

++ 我是 PostgreSQL 的新手,我从其他人那里得到的一些建议对我来说太高级了......如果你提出一些方法,我将不胜感激,简要解释一下它是什么

就个人而言,这似乎是错误的工作方式。 在这种情况下,我会将所有船舶数据集中在一个 table 中,然后我会在

中包含一个 shipid
  • realtime_table
  • cargo_table
  • dimensions_table
  • attendants_table

从那时起,如果您认为您的数据量会很大,您有以下选择。

  1. 在对查询很重要的字段上创建索引,Postgres 查询计划器对此非常有用。

  2. 最新的 Postgres 已根据您提供的条件实现了 table partitioning,而无需使用 table 继承。**

由于您需要网页上的实时数据,您可以使用 Listen command for Postgres 当从船上接收到数据时(除非你有另一种方式将此数据发送到网络服务器,如网络套接字)

在这里添加一点颜色 - 如果您已经在使用 TimescaleDB 扩展,则不需要使用 table 分区,因为 TimescaleDB 会自动为您处理。

将所有船舶数据存储在单个 table 中并在时间序列 table 之外使用元数据 table 的方法是一种常见的做法。只要您按照其他人的建议构建正确的索引,就应该没问题。需要注意的重要一点是,如果您(例如)按时建立索引,您希望确保在查询中包含时间以从约束排除中受益。