我一直在閱讀question,但它並沒有幫助我。考慮到數據庫管理,我認爲一個數據庫具有多個模式比其他選項更容易維護,但是就性能而言,哪個更好?是否相互之間有優勢?Postgresql一個數據庫與多個模式與多個數據庫與一個模式
TIA。
我一直在閱讀question,但它並沒有幫助我。考慮到數據庫管理,我認爲一個數據庫具有多個模式比其他選項更容易維護,但是就性能而言,哪個更好?是否相互之間有優勢?Postgresql一個數據庫與多個模式與多個數據庫與一個模式
TIA。
如果性能很重要,那麼就不能用基準測試您的特定用例。如果不那麼重要,那麼就更容易管理!與編程器/ DBA時間相比,硬件便宜,並且與更復雜設置中的預期更高事故率相比較。更不用說電腦遵循摩爾定律,但這一天固執地拒絕延長。
如果我不得不猜測,具有不基準您的特定使用案例(因爲我不能),我猜一個數據庫有多個架構將性能更好的原因是:
每連接到一個數據庫AFAIK。在PostgreSQL中連接建立/拆卸是很昂貴的。
許多模式比許多數據庫更接近許多表,我希望很多表優化的次數比我預期的要多。
但是,我可以看到一個可能適用的反例。每個數據庫都存儲在一個目錄中。這使得使用普通的文件系統工具(例如掛載點和/或符號鏈接)將數據庫跨文件系統分割數據庫以及磁盤陣列非常容易。將數據庫分割到多個陣列上的可能性不大於具有相同磁盤數量的較大RAID10陣列,但會提供更好的隔離(數據庫A執行大量查詢不會對數據庫B造成太大影響)。不過,請檢查您的操作系統的IO調度程序文檔;請記住,每個PostgreSQL連接都有自己的後端進程,因此每個進程的公平隊列可以更好地實現這一點。
請注意,您還可以使用PostgreSQL的CREATE TABLESPACE
和朋友在文件系統之間對數據進行細分,因此上面實際上也可以使用模式來完成。
我認爲這不重要。每個表格將存儲在一個單獨的文件中,唯一的問題是文件所在的目錄。由於性能主要受到對單個文件的讀寫操作的影響,因此目錄中文件的組織應該幾乎沒有影響。
性能方面,它將完全取決於您的應用程序。
例如,多個數據庫需要每個數據庫的連接池。如果您擁有數百或數千個數據庫,那麼這意味着您無法進行連接池。除了說一個具有到數據庫的單一持久連接的客戶端應用程序之外,任何事情都會讓你付出代價。但是,如果您只能一次訪問「一個數據庫」(而且彼此之間不存在幾秒鐘),則將事物保存在不同的數據庫中將只需要爲正在使用的數據庫加載系統表緩存,留下更多的內存來緩存用戶表(因爲每個數據庫中的系統表將顯着更小)。
在大多數情況下,一個數據庫中的模式將勝出。一個相當常見的解決方案是混合的X數據庫和Y模式。
多個數據庫比我看到的多個模式(名稱空間)沒有性能優勢(除了可能如果您有一個令人難以置信的大量表)。 CREATE TABLESPACE
允許你在文件系統中隨心所欲地放置任何你想要的東西,這樣在任何情況下都可以控制物理存儲。
主要區別在於,當您跨多個模式查詢時,它比跨多個數據庫查詢要好得多。另外,如果全部在同一個數據庫中,您可以通過連接池共享更多連接。
「創建TABLESPACE和朋友,所以上面實際上也可以使用模式來完成。」是的,我認爲使用許多數據庫沒有任何性能優勢。順便說一句,我不明白RAID與這個問題有什麼關係。無論數據庫與模式問題如何,您都可以隨時隨地使用表空間。 – 2009-09-06 16:37:54
@Jeff Davis:是的,你可以,使用標準的Unix工具,而不是SQL命令,可以更容易地處理多個數據庫。關於RAID的一點是,通過將所有這些磁盤添加到RAID10,您通常可以獲得比仔細分割磁盤更好的性能。 – derobert 2009-09-06 19:31:28