Postgresql IoT-Postgres数据库-单表和;每个客户端的数据库与所有客户端的共享数据库

Postgresql IoT-Postgres数据库-单表和;每个客户端的数据库与所有客户端的共享数据库,postgresql,database-design,bigdata,iot,multi-tenant,Postgresql,Database Design,Bigdata,Iot,Multi Tenant,我正在创建一个基于传感器数据显示仪表盘的软件平台。一些关键指标/背景: 传感器放置在房间内,每个客户每年产生约1.5亿条记录 平台应适用于约20-30个客户 仅使用Postgres(timeseries db可能太复杂,目前还无法了解),如果可能的话,不使用Postgres的表分区(在这个阶段可能太复杂) 平台和架构应工作1年 平台将显示仪表盘和聚合数据(小时、日、月级别),但我还需要来自传感器的粒度/原始数据(例如,间隔5分钟)来触发警报 您对以下两个选项有何看法/建议: 选项1:每个客

我正在创建一个基于传感器数据显示仪表盘的软件平台。一些关键指标/背景:

  • 传感器放置在房间内,每个客户每年产生约1.5亿条记录
  • 平台应适用于约20-30个客户
  • 仅使用Postgres(timeseries db可能太复杂,目前还无法了解),如果可能的话,不使用Postgres的表分区(在这个阶段可能太复杂)
  • 平台和架构应工作1年
  • 平台将显示仪表盘和聚合数据(小时、日、月级别),但我还需要来自传感器的粒度/原始数据(例如,间隔5分钟)来触发警报
您对以下两个选项有何看法/建议:

  • 选项1:每个客户端1个数据库,1个原始传感器数据表(1年后约1.5亿个记录表)

    • 更容易处理数据(每个表1.5亿行-->已经尝试在其上运行查询,延迟也可以,索引正确),更灵活地处理客户端请求(例如,如果一个客户端在前端请求特定的仪表板/报告),风险更低,就像一个数据库错误->其他客户端不会依赖同一个一样
    • 但是可能很难维护,并且可能会增加手动任务,特别是关于前端输出的任务(每个客户端的查询/数据源不同)
  • 选项2:1个用于所有客户端的数据库,1个大表收集所有原始传感器数据(1年后可以是45亿行,不删除,如果只保留3个月的数据,则可以是11亿行,这意味着定期删除),1个聚合表在小时级别(小于1000万行)聚合原始数据,以在前端显示输出数据

    • 可能更难处理所有数据(对>10亿行的表进行聚合查询需要时间?、在如此大小的表中进行摄取?、删除需要花费大量时间?)等等
    • 敏捷的复杂性和潜在的风险增加/交叉数据污染(一个客户端的bug=>所有客户端的bug)
    • 但基于聚合数据的查询速度更快,易于维护,查询和前端输出更加自动化(相同的数据源/数据库)
下面是我收集的更详细的信息/优点和缺点的图片-如果您能就这个问题提出建议,那将是非常好的? 此外,我知道Postgres在未来将不是一个可行的选择(因为timeseries db或Nosql可以表现得更好),但由于各种原因和学习曲线,我希望在第一个版本中使用它

非常感谢你的帮助