我有一个系统每年生产大约5TB的带时间标记的数字数据。每行的字段往往不同,为了避免出现大量的NULL,我正在考虑将Postgres用作带有JSONB的文档存储。
但是,JSONB字段上的 GIN索引似乎不是用于数字和日期时间数据。数字和日期没有不等式或范围运算符。
Here他们建议使用LATERAL
制作特殊构造,将JSON值视为普通数字列,here有人建议对日期和过滤字符串范围使用“可排序”字符串格式。
这些解决方案听起来有些苛刻,我对它们的表现感到疑惑。也许这对JSONB来说不是一个好的应用程序?
我可以想到使用关系数据库的另一种方法是使用6th normal form,为每个(可选)字段创建一个表,但是会有数百个表。这听起来像是一个很大的JOIN混乱,并且必须在新的字段弹出时随时创建新表。但也许它仍然比超慢JSONB实现更好。
非常感谢任何指导。
数据主要是传感器读数,物理量和布尔标志。每行中存在哪些子集是不可预测的。索引是一个整数,唯一始终存在的字段是相应的日期。
每个值可能只有一个写入,几乎没有更新。读取可以是基于任何字段的频繁和切片(有些字段更可能在WHERE语句中而不是其他字段)。