Database design 在以下情况下,我应该使用PostgreSQL数组类型吗

Database design 在以下情况下,我应该使用PostgreSQL数组类型吗,database-design,postgresql,Database Design,Postgresql,我正在使用PostgreSQL 我意识到PostgreSQL有数组数据类型 目前,我需要使用数据库来存储一家半导体工厂的测量结果 他们正在生产半导体器件。每个半导体单元可以有不同数量的测量参数 我计划用下面的方法设计这个表 SemicondutorComponent ===================== ID | Measurement ================= ID | Name | Value | SemicondutorComponent_ID 数据示例: Semi

我正在使用PostgreSQL

我意识到PostgreSQL有数组数据类型

目前,我需要使用数据库来存储一家半导体工厂的测量结果

他们正在生产半导体器件。每个半导体单元可以有不同数量的测量参数

我计划用下面的方法设计这个表

SemicondutorComponent
=====================
ID |


Measurement
=================
ID | Name | Value | SemicondutorComponent_ID
数据示例:

SemicondutorComponent
=====================
1 |
2 |

Measurement
=================
1 | Width       | 0.001 | 1
2 | Height      | 0.021 | 1
3 | Thickness   | 0.022 | 1
4 | Pad0_Length | 0.031 | 1
5 | Pad1_Width  | 0.041 | 1
6 | Width       | 0.001 | 2
7 | Height      | 0.021 | 2
8 | Thickness   | 0.022 | 2
9 | Pad0_Length | 0.031 | 2
10| Pad1_Width  | 0.041 | 2
11| Pad2_Width  | 0.041 | 2
12| Lead0_Width | 0.041 | 2
假设一家工厂一天生产2400万台

SemiconductorComponent表在一天内将有2400万行

假设一个半导体组件单元有50个测量参数。(根据半导体元件类型,可以多也可以少)

测量表将在一天内有24*5000万行

这样设计有效吗

我希望拥有超快的写入速度和合理的快速读取数据库的速度。

或者我应该使用PostgreSQL数组工具吗

SemicondutorComponent
=====================
ID | Array_of_measurement_name | Array_of_measurement_value

我无法评论数组相对于常规表的写入速度,但据我所知,使用2个数组的设计对于查询来说会非常麻烦

我也不知道读取数组的性能如何,但通过查看文档,我可以看出,所有数组访问都是通过位置引用(索引)完成的,因此要找到一个特定的度量值将是一件非常痛苦的事情-您必须遍历名称数组才能找到正确的索引,然后用它来找到值。我怀疑它是否可以在纯SQL中完成,它可能需要一个用户定义的函数

现在关于表的设计:您似乎关心写入速度。每天有2400万个组件,即每小时100万行,这并不算多。乘以50,在最坏的情况下,对于测量来说,每小时5100万行,因此每分钟不到100万行。我认为这应该是可行的,尽管建议批量插入,并避免在许多短期事务上执行许多单行插入(最好插入它们,并以10.000或100.000为一组进行提交)

我确实认为您还需要设计一个归档和/或聚合解决方案,因为一直插入这些卷似乎不太容易维护。我怀疑它是否也有用,但也许只是我不了解这个数据库的用途。我的意思是,对我来说,你不太可能希望在一个组件制造一年后,能够精确地对其进行单独测量。然而,随着时间的推移,保持诸如平均值、最小值、最大值和STDEV测量值之类的统计数据似乎是有用的。但也许你可以解释一下


我想到的另一件事是,它可以帮助首先将原始测量数据存储在一个廉价而快速的日志中(CSV格式的文本文件即可),然后使用多个读卡器读取数据并将其插入数据库。这些读者可以以一种相当稳定的方式阅读。这将减少数据库的瓶颈,并使系统更加健壮(假设日志继续工作的几率高于数据库崩溃)。当然,如果您需要数据库的实时报告来监控流程,这种方法就不太合适了(不过,对于我来说,您需要在单个组件级别执行此操作似乎很奇怪)

我无法评论数组与常规表的写入速度,但据我所知,带有2个数组的设计对于查询来说会非常麻烦

我也不知道读取数组的性能如何,但通过查看文档,我可以看出,所有数组访问都是通过位置引用(索引)完成的,因此要找到一个特定的度量值将是一件非常痛苦的事情-您必须遍历名称数组才能找到正确的索引,然后用它来找到值。我怀疑它是否可以在纯SQL中完成,它可能需要一个用户定义的函数

现在关于表的设计:您似乎关心写入速度。每天有2400万个组件,即每小时100万行,这并不算多。乘以50,在最坏的情况下,对于测量来说,每小时5100万行,因此每分钟不到100万行。我认为这应该是可行的,尽管建议批量插入,并避免在许多短期事务上执行许多单行插入(最好插入它们,并以10.000或100.000为一组进行提交)

我确实认为您还需要设计一个归档和/或聚合解决方案,因为一直插入这些卷似乎不太容易维护。我怀疑它是否也有用,但也许只是我不了解这个数据库的用途。我的意思是,对我来说,你不太可能希望在一个组件制造一年后,能够精确地对其进行单独测量。然而,随着时间的推移,保持诸如平均值、最小值、最大值和STDEV测量值之类的统计数据似乎是有用的。但也许你可以解释一下


我想到的另一件事是,它可以帮助首先将原始测量数据存储在一个廉价而快速的日志中(CSV格式的文本文件即可),然后使用多个读卡器读取数据并将其插入数据库。这些读者可以以一种相当稳定的方式阅读。这将减少数据库的瓶颈,并使系统更加健壮(假设日志继续工作的几率高于数据库崩溃)。当然,如果您需要数据库的实时报告来监控流程,那么这种方法就不太合适了(不过,对于我来说,您需要在单个组件级别执行此操作似乎很奇怪)

这取决于您计划如何访问数据,其次取决于您计划如何存储数据

如果您要检查作为一个单位的零部件的测量值,并且不打算使用s