Database Postgres-在应用程序之间共享数据集

Database Postgres-在应用程序之间共享数据集,database,postgresql,Database,Postgresql,我有两个web应用程序,管理一个和公共一个。虽然两者都有相当数量的独立数据,但其中都使用了某一部分,我们称之为items。更确切地说,项目在管理应用程序中创建和编辑,然后在公共应用程序中显示 由于两者都使用PostgreSQL作为数据库后端,所以我认为它们可以在数据库级别加入—我将在公共数据库中创建视图,通过dblink将数据获取到管理数据库 考虑到以下约束条件,这是一个好的解决方案吗 项目比较多, 公共应用程序将对数据集进行广泛搜索 在公共方面,数据有点陈旧是可以的 目前应用程序使用相同的物

我有两个web应用程序,管理一个和公共一个。虽然两者都有相当数量的独立数据,但其中都使用了某一部分,我们称之为items。更确切地说,项目在管理应用程序中创建和编辑,然后在公共应用程序中显示

由于两者都使用PostgreSQL作为数据库后端,所以我认为它们可以在数据库级别加入—我将在公共数据库中创建视图,通过dblink将数据获取到管理数据库

考虑到以下约束条件,这是一个好的解决方案吗

  • 项目比较多,
  • 公共应用程序将对数据集进行广泛搜索
  • 在公共方面,数据有点陈旧是可以的
  • 目前应用程序使用相同的物理数据库服务器,但将来可能会拆分

如果没有,您有什么建议?

不要将数据放在单独的数据库中,而是将所有数据放在一个数据库中,然后使用和将数据分离出来

具体而言:

  • 公共和管理站点应使用不同的“登录角色”(用户)进行连接
  • 仅由管理员站点使用的表可以位于
    admin
    架构中,并且公共用户不会为该架构授予
    USAGE
  • 数据的其他部分可以放在命名模式中,其中一些模式可以被两个站点完全访问,其中一些模式可以混合使用。(您可以在模式中的所有表上使用
    GRANT…,
    并且如果您将模式划分得很好的话。)
  • 正如您所说,public应该具有一些只读访问权限的表可以在视图中引用。公共用户可以
    授权
    访问这些视图,而不是底层表。视图可以引用另一个模式中的表,甚至可以跨多个模式引用表,如果这有助于您进行管理的话
  • 或者,只需不授予公共用户对整个表的
    INSERT
    UPDATE
    权限,即可授予对该表的只读访问权限

您甚至可能会发现,将public和admin视为同一应用程序的不同前端接口,而不是单独的应用程序是很有用的,例如,可能有一些代码应该在它们之间共享,而不是复制和粘贴。

与其将数据放在单独的数据库中,不如将所有内容都放在一个数据库中,然后用和把东西分开

具体而言:

  • 公共和管理站点应使用不同的“登录角色”(用户)进行连接
  • 仅由管理员站点使用的表可以位于
    admin
    架构中,并且公共用户不会为该架构授予
    USAGE
  • 数据的其他部分可以放在命名模式中,其中一些模式可以被两个站点完全访问,其中一些模式可以混合使用。(您可以在模式中的所有表上使用
    GRANT…,
    并且如果您将模式划分得很好的话。)
  • 正如您所说,public应该具有一些只读访问权限的表可以在视图中引用。公共用户可以
    授权
    访问这些视图,而不是底层表。视图可以引用另一个模式中的表,甚至可以跨多个模式引用表,如果这有助于您进行管理的话
  • 或者,只需不授予公共用户对整个表的
    INSERT
    UPDATE
    权限,即可授予对该表的只读访问权限

您甚至可能会发现,将public和admin视为同一应用程序的不同前端接口而不是单独的应用程序是很有用的,因为它们之间可能存在应该共享的代码,而不是复制和粘贴的代码,例如。

让公众直接访问
管理员
数据库,并通过角色控制权限


让公众直接访问
管理员
数据库,并通过角色控制权限


相同的数据库和不同的模式可能是一个解决方案——我会研究一下。然而,就拆分应用程序而言,我有意识地决定允许稍微不同的“业务规则”以及独立开发和扩展它们。代码重用可以通过共享库来处理:)@tomsmikos啊,我明白了,共享库是有意义的。分离数据库的主要考虑因素是写入:只读操作可以使用复制(相当)轻松地进行扩展(使管理站点连接到单个主副本),但公共站点需要写入的内容(例如日志)TimSmiksOS另一个要考虑的是独立的DBS,你不能在一个以上的DB上提交一个原子事务而不需要通过两个提交(准备好的事务)跳过很多环。这意味着您可能需要更多的应用程序逻辑来同步某些更改,并确保应用程序不会比使用单个数据库和多个架构时少一半。@Tomsmikos顺便说一句,PostgreSQL 9.3将为PostgreSQL表提供可写的外部数据包装器,所以,您可以创建链接表。相同的数据库和不同的模式可能是一个解决方案——我将对此进行研究。然而,就拆分应用程序而言,我有意识地决定允许稍微不同的“业务规则”以及独立开发和扩展它们。代码重用可以通过共享库来处理:)@tomsmikos啊,我明白了,共享库是有意义的。分离数据库的主要考虑因素是写入:只读操作可以使用复制(相当)轻松地进行扩展(使管理站点连接到单个主副本),但公共站点需要写入的内容(例如日志)“TimSmiksOS”另一个要考虑的问题是,独立的DBS是不可能跨越两个以上的数据库提交一个原子事务而不需要通过两个逗号跳过多个环。