【问题标题】:Json Column in Existing Postgres Table vs New Table现有 Postgres 表与新表中的 Json 列
【发布时间】:2017-02-15 20:30:05
【问题描述】:

我有一个“目录”,我试图在上面显示信息。此信息将从几个不同的表中提取,用户将能够设置首选项以隐藏其“目录”上相应表中的记录。我正在运行 Postgres 数据库

所以,我的问题是:

创建一个新表 (table_a_to_catalog) 会更好(性能方面),它将存储 table_a 中用户想要为该目录​​隐藏的记录的 table_a_id 和 catalog_id。然后有另一个表(table_b_to_catalog)来保存该连接......等等......

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

【问题讨论】:

    标签: ruby-on-rails json postgresql


    【解决方案1】:

    这真的取决于这个目录的用例......如果信息是只读的,并且您每天运行一次工作来更新所述目录,那么 json 会更好。但是,如果您想实时更新分类日志的信息并允许对其进行编辑,那么最好有一个单独的表格。

    至于个人喜好,我认为将数据保存在表格中可以让您更灵活地将数据用于其他功能

    【讨论】:

    • 如果你有一个单独的工作或功能可以批量更新信息,那么 json 应该是你最好的选择
    【解决方案2】:

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

    如果只是简单地向用户表添加一个字段,其中包含一个 hstore、JSON 或 CSV 视图数据(例如隐藏首选项),这将略微减少初始加载时间。如果“隐藏”意味着简单地不在客户端显示它,那么 JSON 会更有意义,而如果您不希望一开始就将数据发送到客户端,则 hstore 更有意义。

    我说得很少,因为许多其他因素(缓存)对性能的影响远不止于此。您可能想考虑将 Redis 用于应用程序运行时,将 Postgres 用于数据仓库。

    【讨论】:

    • 我不相信每个目录的每个隐藏字段都需要一个数据库条目。使用 JSON(而不是 hstore),您可以为要隐藏的每个“类别”创建一个 id 数组。所以目录表的记录可能是 catalog_id: 1 name: Catalog Test user_id: 5 hide: {"models": [1,2,3,4,5], "equipment": [3,6,10,39 ,53]} 然后,当生成目录时,它只需要获取 group_by,然后将这些值存储在 @variables 中。我还说 JSON 而不是 hstore,因为使用散列,您无法在不进行字符串转换的情况下保存数组,这可能会很混乱。
    猜你喜欢
    • 2020-03-26
    • 2015-08-11
    • 2015-08-13
    • 2020-12-19
    • 2013-07-22
    • 2020-07-07
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多