用于存储长列表的数据类型

时间:2015-07-12 13:33:06

标签: postgresql

在PostgreSQL中存储大型列表的正确方法是什么?

我目前有一个“用户”表,其中“关注者”列存储该用户拥有的关注者列表。此列表存储在JSON中,每次服务器要将新用户添加到该列表时,它都会从数据库中检索它,附加新用户,然后用新列表替换旧列表。

问题是这些列表往往会变得非常冗长,这可能会影响性能。是否可以直接通过SQL直接附加到列表而不检索它并在以后重写它?

2 个答案:

答案 0 :(得分:1)

为粉丝使用单独的表格。该表应至少有两列:userid和followerid。为这张桌子设置主键也是一种很好的做法,所以让我们给它一个" ufid"。

如果应用程序需要,您可以执行select以获取所有元素并计算JSON字符串。但是不要使用JSON或列表的任何其他字符串表示,因为它会破坏关系数据库的用途。

要添加新关注者,只需使用userid将新记录添加到关注者表中;删除和更新也是在记录级别完成的,无需使用"其他记录"。

答案 1 :(得分:0)

如果关注者是作为其帐户主键的整数列表,请将其设为整数数组int[]。如果它们是用户名或其他单词,请使用字符串数组character varying[]

要附加到数组列,您可以执行以下操作:

UPDATE the_table SET followers = followers || new_follower WHERE id = user;