在PostgreSQL中表示稀疏数据

在Postgresql中表示稀疏数据矩阵的最好方式是什么?我看到的两个明显的方法是:

>将数据存储在单个表中,并为每个可想到的特征(可能数百万)使用单独的列,但对于未使用的功能,认值为NULL.这在概念上很简单,但是我知道,对于大多数RDMS实现,这通常是非常低效的,因为NULL值通常占用一些空间.但是,我读了一篇文章(不幸的是找不到链接),声称PG不占用NULL值的数据,使其更适合存储稀疏数据.
>创建单独的“行”和“列”表,以及一个中间表来链接它们并存储该行的列的值.我相信这是更传统的RDMS解决方案,但是与此相关的更多复杂性和开销.

我还发现了PostgreDynamic,它声称更好地支持稀疏数据,但是我不想将整个数据库服务器切换到PG分支,仅用于此功能.

还有其他解决方案吗?我应该使用哪一个

有一些解决方案想到,

1)将功能分成通常设置在一起的组,为每个组创建与主数据具有一对一外键关系的表,只有在查询时才需要连接表

2)使用EAV反模式,从主表中创建一个带有外键字段的“功能”表,以及字段名和值列,并将功能存储在该表中的行中,而不是作为主要属性中的属性

3)与PostgreDynamic相似,为主表中的每个“列”创建一个表(它们为这些表使用单独的命名空间),并创建函数以简化(以及有效地索引)访问和更新数据那些表

4)使用XML或VARCHAR在主数据中创建列,并在其中存储一些表示数据的结构化文本格式,通过功能索引在数据上创建索引,编写函数以更新数据(或使用XML函数,如果您正在使用该格式)

5)使用contrib / hstore模块创建一个类型为hstore的列,可以保存键值对,并且可以索引和更新

6)生活着很多空场

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...