回答

收藏

在PostgreSQL中表示稀疏数据

技术问答 技术问答 565 人阅读 | 0 人回复 | 2023-09-14

在PostgreSQL稀疏数据矩阵的最佳方法是什么?两种明显的方法是:' e" b) f, m1 D7 o: T& R' l
[ol]将数据存储在一个表中,每个可想的功能(可能是几百万)都有一个单独的列,但未使用的默认值是NULL。概念上很简单,但我知道在大多数情况下RDMS在实现中,这通常是低效的,因为NULL通常会占用 一些    空间。然而,我读了一篇文章(不幸的是,我找不到它的链接),声称这篇文章PG不会占用NULL值数据更适合存储稀疏数据。+ c, o; K: \3 m" o
创建单独的行和列表,以及链接它们并存储在银行的中间表。我相信这更传统RDMS解决方案,但是与此相关的复杂性和开销却更大。
7 q: K- B+ K" D7 ~, H- H[/ol]我还找到了PostgreDynamic,声称可以更好地支持稀疏数据,但我不想仅仅为此功能将整个数据库服务器切换到PG分支。
' y3 r* U- y6 Z2 S3 M8 [, v# L还有其他解决方案吗?我应该用哪个?1 a- K2 o9 H4 o5 n& Y+ O
                                                                + V2 f' L+ W1 I: m. J* p+ g
    解决方案:                                                               
8 u2 Q1 F( ?; @! s7 y                                                                我想到了一些解决方案,
0 o$ I, w/ q6 `) M1 c& W1)将元素分成通常设置在一起的组,为每个组创建一个与主数据一对一的外部关系,只在查询时连接所需的表
; r# S+ x9 p  s) O2)使用EAV反模式,使用主表中的外键字段、字段名和值列创建功能表,并将功能存储在表中,而不是主表中的属性表中" `7 x0 G8 V. M
3)与PostgreDynamic类似的操作,为主表中的每个列创建一个表(它们使用单独的命名空间),并创建函数来简化访问和更新数据(并有效地建立索引)。那些桌子" v9 S& |  W' w3 L% @, Z) I. d
4)使用XML或VARCHAR在主数据中创建一列,并在其中存储一些表示您数据的结构化文本格式,使用功能索引在数据上创建索引,编写函数以更新数据(或在您使用XML使用函数XML函数正在使用该格式)
! z: l2 y% S; t4 M, k5)使用contrib / hstore创建一种模块hstore的列,该列可以保存键值对,并且可以进行索引和更新
! u" c! p# i: V1 T% x& r! W6)住在许多空旷的田野里
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则