2013-04-10 71 views
1

我有兩個Web應用程序,一個是管理員,一個是公用的。雖然兩者都有相當數量的單獨數據,但某個部分,我們稱之爲物品,都用於兩者。更確切地說,項目是在管理應用程序中創建和編輯的,然後顯示在公共應用程序中。Postgres - 在應用程序之間共享數據集

因爲兩者都使用PostgreSQL作爲數據庫後端,我想他們可以在數據庫級別加入 - 我會在公共數據庫中創建視圖,通過dblink將數據傳輸到管理數據庫。

這是一個很好的解決方案,給出以下約束?

  • 有相當多的項目,
  • 公共應用程序會做大量的搜索對數據集,
  • 這是確定的數據是公共側有點陳舊,
  • 目前的應用程序使用相同的物理數據庫服務器,但未來可能會拆分;

如果不是,您會有什麼建議?

回答

4

不是將數據放在單獨的數據庫中,而是將所有內容放入單個數據庫中,然後使用schemasaccess permissions分隔事情。

具體做法是:

  • 公衆和管理的網站應該連接使用不同的 「登錄的角色」(用戶)。
  • 管理網站只能使用admin模式,並且公共用戶不會爲該模式授予USAGE
  • 其他部分的數據可以放在命名模式中,其中一些可以被兩個站點完全訪問,其中一些可以混合使用。 (如果將模式劃分得很好,則可以使用GRANT ... ON ALL TABLES IN SCHEMAALTER DEFAULT PRIVILEGES。)
  • 如您所說,公共應該具有某些只讀訪問權的表可以在視圖中引用。公衆用戶可以對這些視圖進行訪問,而不是對基礎表進行訪問。如果可以幫助您管理事物,視圖可以在另一個模式中引用表,或者甚至在多個模式中引用表。
  • 或者,通過簡單地不給予該表上的公共用戶INSERTUPDATE特權,可以授予對整個表的只讀訪問權限。

你甚至可能會發現它有用考慮公衆和管理不作爲單獨的應用,但由於不同的前端接口相同的應用程序 - 有可能是要在兩者之間共享,而不是複製和代碼例如,例如,

+0

相同的數據庫和不同的模式可能是一個解決辦法 - 我會考慮它。然而,就拆分應用程序而言,這是我的一個有意識的決定,允許稍微不同的「業務規則」以及它們的獨立開發和擴展。代碼重用可以通過共享庫:) – 2013-04-10 12:53:13

+0

@TomsMikoss啊,我知道,共享庫是有道理的。分離數據庫的主要考慮因素是寫入:使用複製(將管理站點連接到單個主副本)可以輕鬆地(相當)輕鬆地縮放只讀操作,但公共站點需要寫入的內容(例如日誌)可能是值得分離出來。 – IMSoP 2013-04-10 13:46:16

+0

@TomsMikoss另一件需要考慮的問題是使用單獨的數據庫,您不能跨多個數據庫提交原子事務,而無需通過兩階段提交(準備事務)跳過大量的環節。這意味着您可能需要更多的應用程序邏輯來同步某些更改,並確保事物不會比使用具有多個模式的單個數據庫時所用的應用程序的一半少。 – 2013-04-10 23:51:25

0

讓公衆直接訪問admin db並控制角色的權限。

Database Roles

相關問題