微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在PostgreSQL中表示稀疏数据

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

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

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

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

有一些解决方案想到,

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

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

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

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

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

6)生活着很多空场

原文地址:https://www.jb51.cc/postgresql/192643.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐