0

设想:

  1. 我正在尝试为船舶操作建立一个实时监控网页
  2. 我有 1,000 - 10,000 艘船在运营
  3. 所有船舶都向 DB 发送实时数据,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

这是存储单个船舶实时数据并在网络服务器上获取它们的好方法吗?你会推荐什么其他方法?

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

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

4

2 回答 2

2

就个人而言,这似乎是错误的工作方式。在这种情况下,我会将所有船舶数据放在一个表中,然后从那里我将包含一个 shipid 到

  • 实时表
  • 货物表
  • 尺寸表
  • 服务员表

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

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

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

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

于 2018-09-25T05:56:36.373 回答
1

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

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

于 2018-10-03T17:57:18.300 回答