2016-12-02 56 views
2

根據Simple Configuration Recommendations PostgreSQL的設立最靈活和可管理的環境中推薦的最佳做法是創建一個擁有自己的掛載點在專用的表空間/ pgdata- app_tblspc和「每schema至少應該有兩個表空間,一個用於表,另一個用於索引「創建的Postgres模式

我能夠創建這些掛載點和表空間,但想知道如何將模式分配給特定的表空間。據我所知,表空間是通過CREATE DATABASE ... ... TABLESPACE命令掛數據庫,但在CREATE SCHEMA命令中沒有TABLESPACE指令。

繼簡單配置建議文檔的邏輯,似乎隱含的建議是創建每個應用程序一個數據庫,映射到兩個表空間每個數據庫:一個用於數據,另一個用於索引。

然而,相同的文件接着說該應用程序特定的數據庫是不維持應用之間的數據分離的優選方式。擁有一個擁有多個模式的數據庫是最好的選擇。

我在這裏錯過了什麼?欣賞任何指針。

回答

2
  • 爲什麼CREATE SCHEMA沒有表空間子句?

    Schemas提供了一個邏輯數據的分離,而表空間提供了物理分離。只有持有數據的對象(如表和索引)在其CREATE語句中有一個表空間子句。架構沒有關聯的數據文件。

    如果您希望處於不同架構中的表位於不同的表空間中,則必須爲每個CREATE TABLECREATE INDEX語句添加一個表空間子句。

  • 你應該使用每個應用程序拖表空間,一個表和一個索引?

    我要說的是,這取決於你的性能要求和數據量。

    如果您正在處理多TB數據倉庫,並且希望通過將數據分佈到不同存儲系統來優化性能,那麼使用表空間將是一個有趣的選項。

    對於一個小規模的數據庫,我會說這不值得麻煩,如果你購買了足夠的RAM來適應內存中的數據庫,那麼你會更好。

  • 不同的數據庫或不同的架構是不同應用程序分離數據的更好方法嗎?

    如果應用程序需要訪問彼此的數據,把它們在不同的模式中的一個數據庫。否則,使用兩個數據庫來確保它們不會混淆對方的數據。

總體而言,如果要限制表的增長或表空間位於不同存儲系統上進行負載分配,則表空間是很好的。