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

时间:2018-09-25 05:43:53

标签: postgresql real-time timescaledb

场景:

  1. 我正在尝试为船舶运营建立一个实时监控页面
  2. 我有1,000-10,000艘船在运营
  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

这是存储单个船舶的实时数据并在Web服务器上获取它们的好方法吗?您还建议其他什么方法?

就时间序列而言,我已经在使用称为Timescale DB的PostgreSQL扩展。我的问题不是存储时间序列数据,以防万一我有很多船只。在构造新模式时区分每个船舶的RT数据是一个好主意吗?

++我对PostgreSQL来说还很陌生,我从别人那里得到的一些建议对我来说太高级了。如果您建议某种方法,简要解释一下它的含义,我将不胜感激

2 个答案:

答案 0 :(得分:2)

就个人而言,这似乎是错误的工作方式。 在这种情况下,我会将所有船只数据都放在一个表中,从那里开始,我将包括一个

  • realtime_table
  • cargo_table
  • dimensions_table
  • attendant_table

从那时起,如果您认为数据量将很大,则可以选择以下方式。

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

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

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

答案 1 :(得分:1)

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

将所有船舶数据存储在具有时间序列表之外的元数据表的单个表中的方法是一种常见做法。只要您按照其他人的建议构建正确的索引,就可以了。需要注意的重要一点是,例如,如果您按时建立索引,则要确保在查询中包括时间,以便从约束排除中受益。