目前已有很多PostgreSQL的系統在實際生產環境下管理着超過4TB的數據。一些PostgreSQL系統的極限值如下表所列:
最大單個數據庫大小 | 不限 | ![]() |
最大數據單表大小 | 32 TB | |
單條記錄最大 | 1.6 TB | |
單字段最大允許 | 1 GB | |
單表允許最大記錄數 | 不限 | |
單表最大字段數 | 250 - 1600 (取決於字段類型) | |
單表最大索引數 | 不限 |
http://www.postgres.cn/about
PgSql單表最大32T,不限制記錄數,但最多能存多少條記錄還要看單條記錄大小和對查詢性能的要求,如果沒有復雜的查詢或統計操作正常單表上億條記錄查詢性能也是能接受的。否則就要考慮分區或分庫分表操作。看網上經驗值,為保證較好的查詢性能,MySQL在單表1000w數據記錄時就要考慮分庫分表操作。
https://yq.aliyun.com/articles/7444
分庫分表后會出現實物一致性、跨表Join查詢、查詢結果合並等一些列困難的問題,所以除非特殊情況,可以先考慮PgSql分區操作,分區可讓數據文件存在不同硬盤分區上,但無法跨數據庫,更不能跨服務器。但分區可以提供若干好處:
-
某些類型的查詢性能可以得到極大提升。特別是表中訪問率較高的行位於一個單獨分區或少數幾個分區上的情況下。分區可以減少索引體積從而可以將高使用率部分的索引存放在內存中。如果索引不能全部放在內存中,那么在索引上的讀和寫都會產生更多的磁盤訪問。
-
當查詢或更新一個分區的大部分記錄時,連續掃描那個分區而不是使用索引離散的訪問整個表可以獲得巨大的性能提升。
-
如果需要大量加載或者刪除的記錄位於單獨的分區上,那么可以通過直接讀取或刪除那個分區以獲得巨大的性能提升,因為 ALTER TABLE 比操作大量的數據要快的多。它同時還可以避免由於大量 DELETE 導致的 VACUUM 超載。
-
很少用的數據可以移動到便宜一些的慢速存儲介質上。
這種好處通常只有在表可能會變得非常大的情況下才有價值。到底多大的表會從分區中收益取決於具體的應用,不過有個基本的拇指規則就是表的大小超過了數據庫服務器的物理內存大小。