PostgreSQL - 存储多个主题的实时数据
PostgreSQL - store real-time data of multiple subjects
场景:
- 我正在尝试为船舶操作建立一个实时监控网页
- 我有 1,000 - 10,000 艘船在运营
- 所有船只都在向 DB 发送实时数据,24 小时 - 30 天
- 插入的每个新数据的维度为 1 行 X 100 列
- 加载网页时,将获取并显示所选船舶的所有历史数据
- 最后一行船舶实时数据table将被查询,并在网页上抓取以更新实时屏幕
- 每艘船都有自己的非实时数据,例如船舶尺寸、货物、服务员等...
到目前为止,我一直在考虑为每艘船创建一个新模式。像这样:
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
从那时起,如果您认为您的数据量会很大,您有以下选择。
在对查询很重要的字段上创建索引,Postgres 查询计划器对此非常有用。
最新的 Postgres 已根据您提供的条件实现了 table partitioning,而无需使用 table 继承。**
由于您需要网页上的实时数据,您可以使用
Listen command for Postgres
当从船上接收到数据时(除非你有另一种方式将此数据发送到网络服务器,如网络套接字)
在这里添加一点颜色 - 如果您已经在使用 TimescaleDB 扩展,则不需要使用 table 分区,因为 TimescaleDB 会自动为您处理。
将所有船舶数据存储在单个 table 中并在时间序列 table 之外使用元数据 table 的方法是一种常见的做法。只要您按照其他人的建议构建正确的索引,就应该没问题。需要注意的重要一点是,如果您(例如)按时建立索引,您希望确保在查询中包含时间以从约束排除中受益。
场景:
- 我正在尝试为船舶操作建立一个实时监控网页
- 我有 1,000 - 10,000 艘船在运营
- 所有船只都在向 DB 发送实时数据,24 小时 - 30 天
- 插入的每个新数据的维度为 1 行 X 100 列
- 加载网页时,将获取并显示所选船舶的所有历史数据
- 最后一行船舶实时数据table将被查询,并在网页上抓取以更新实时屏幕
- 每艘船都有自己的非实时数据,例如船舶尺寸、货物、服务员等...
到目前为止,我一直在考虑为每艘船创建一个新模式。像这样:
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
从那时起,如果您认为您的数据量会很大,您有以下选择。
在对查询很重要的字段上创建索引,Postgres 查询计划器对此非常有用。
最新的 Postgres 已根据您提供的条件实现了 table partitioning,而无需使用 table 继承。**
由于您需要网页上的实时数据,您可以使用 Listen command for Postgres 当从船上接收到数据时(除非你有另一种方式将此数据发送到网络服务器,如网络套接字)
在这里添加一点颜色 - 如果您已经在使用 TimescaleDB 扩展,则不需要使用 table 分区,因为 TimescaleDB 会自动为您处理。
将所有船舶数据存储在单个 table 中并在时间序列 table 之外使用元数据 table 的方法是一种常见的做法。只要您按照其他人的建议构建正确的索引,就应该没问题。需要注意的重要一点是,如果您(例如)按时建立索引,您希望确保在查询中包含时间以从约束排除中受益。