【问题标题】:Postgres - sharing data sets between applicationsPostgres - 在应用程序之间共享数据集
【发布时间】:2013-04-02 06:42:02
【问题描述】:

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

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

考虑到以下限制,这是一个好的解决方案吗?

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

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

【问题讨论】:

    标签: database postgresql


    【解决方案1】:

    与其将数据放在单独的数据库中,不如将所有内容放在一个数据库中,然后使用schemasaccess permissions 将它们分开。

    具体来说:

    • 公共站点和管理站点应使用不同的“登录角色”(用户)进行连接。
    • 仅由管理站点使用的表可能位于 admin 架构中,而公共用户不会为该架构授予 USAGE
    • 可以将其他数据部分放入命名模式中,其中一些可以由两个站点完全访问,其中一些可以混合使用。 (如果你很好地划分你的模式,你可以使用GRANT ... ON ALL TABLES IN SCHEMAALTER DEFAULT PRIVILEGES。)
    • 如您所说,公共应具有某些只读访问权限的表可以在视图中引用。公共用户可以GRANTed 访问这些视图而不是基础表。视图可以引用另一个架构中的表,甚至可以跨多个架构引用,如果这有助于您管理事物的话。
    • 或者,可以通过不授予公共用户 INSERTUPDATE 对该表的权限来授予对整个表的只读访问权限。

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

    【讨论】:

    • 相同的数据库和不同的模式可能是一个解决方案 - 我会研究它。然而,就拆分应用程序而言,这是我有意识的决定,允许稍微不同的“业务规则”以及它们的独立开发和扩展。代码重用可以通过共享库处理:)
    • @TomsMikoss 啊,我明白了,共享库很有意义。分离数据库的主要考虑因素是写入:使用复制可以(相当)轻松地扩展只读操作(使管理站点连接到单个主副本),但公共站点需要写入的内容(例如日志)可能是值得分开。
    • @TomsMikoss 使用单独的数据库要考虑的另一件事是,如果不通过两阶段提交(准备好的事务)跳过很多圈,就不能跨多个数据库提交原子事务。这意味着您可能需要更多的应用程序逻辑来同步某些更改,并确保与使用具有多个架构的单个数据库相比,事情不会被应用一半。
    • @TomsMikoss BTW,PostgreSQL 9.3 将为 PostgreSQL 表提供可写的外部数据包装器,因此您可以创建链接表。
    【解决方案2】:

    让 public 直接访问admin db,并通过角色控制权限。

    Database Roles

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多