现有Postgres表中的Json列与新表

时间:2017-02-15 20:30:06

标签: ruby-on-rails json postgresql

我有一个"目录"我试图显示信息。该信息将从几个不同的表中提取,用户可以设置首选项以隐藏其目录中相应表中的记录。#34;。我正在运行Postgres数据库

所以,我的问题是:

创建一个新表(table_a_to_catalog)会更好(性能明智),它将存储table_a_id和table_a中记录的catalog_id,用户希望为该目录隐藏该记录。然后有另一个表(table_b_to_catalog)来保存该连接...依此类推......

OR

将隐藏首选项存储为目录记录中的json值会更好吗?所以它会像{" table_a" => [id1,id2,id3]," table_b" => [id1,id2,id3]}

2 个答案:

答案 0 :(得分:1)

这实际上取决于此目录的用例...如果信息是只读的,并且您每天运行一次工作来更新所述目录,那么json会更好。但是,如果您想更新有关catelog实时的信息并允许其可编辑,那么最好使用单独的表。

至于个人偏好,我认为如果要将数据用于其他功能,保留表中的数据可以提供更大的灵活性

答案 1 :(得分:1)

非常大的表会对性能产生负面影响。保持"隐藏"在postgres表中查看数据意味着为每个目录中的每个隐藏条目都有一个DB条目。每个客户端应用程序都需要过滤该表以获取与其用户相关的信息,并且对于许多用户而言,这可能需要相当长的时间。

如果只是在用户表格中添加一个字段,其中包含hstore,JSON或CSV视图数据(例如隐藏首选项),则会缩短初始加载时间略微。如果"隐藏" JSON会更有意义。意味着根本不在客户端显示它,如果您希望不将数据发送到客户端,那么hstore更有意义。

我说的很少,因为许多其他因素(缓存)会影响性能。您可能希望将Redis用于应用程序运行时,将Postgres用于数据仓库。