2010-01-21 54 views
0

最近我們正在努力將我們的軟件從一般的PC服務器遷移到一種使用Disk on module (DOM)而不是硬盤驅動器的嵌入式系統。在內存中運行postgresql是個好主意嗎?

我的同事堅持認爲,因爲DOM只能支持大約100萬次寫操作,所以我們應該在RAM磁盤中完全運行我們的數據庫並將數據庫備份到DOM。

有3種方式來觸發備份:

  1. 用戶觸發

  2. 每30分鐘

  3. 每當有一些添加/更新/數據庫

  4. 刪除操作

因爲我們預計用戶只會修改在安裝系統的時候,我想可能postgresql不會經常寫這個數據庫。

但是我對postgresql知之甚少,我不能判斷它是否值得所有這些麻煩以及哪種方法更好。

您對此有何看法?

+2

在大多數系統中,數據庫的「熱頁」應該幾乎完全在內存中運行。如果他們不是,那麼你的數據庫要麼很大,要麼設置不好。 – 2010-01-21 08:41:51

+0

您的意思是不是每個「創建/更新/刪除」都會觸發對硬盤的寫操作嗎? – ablmf 2010-01-21 08:49:32

+0

@Mitch:同意,但DB(或下面的操作系統)仍會不時寫回這些頁面(例如,當磁盤空閒時)。 – 2010-01-21 09:02:03

回答

1

固態硬盤的問題可以通過固態硬盤解決。有時候這些芯片組做得不好,或者把責任交給其他人。在這種情況下,您可以使用專門設計用於平衡損耗的文件系統。 UBIFSLogFS是合適的文件系統。

+0

PostgreSQL在這些「非標準」文件系統上執行的性能如何? – 2010-01-21 20:14:23

+0

這些文件系統像大多數固態硬盤那樣分配塊 - http://lwn.net/Articles/353411/。我不知道PostgreSQL總體上如何處理SSD,或者如何調整,但這不是全新的理由。 – Tobu 2010-01-21 20:44:39

1

假設有關DOM寫入週期的聲明是真實的,我不能評論,那麼這將不會工作得很好。 PostgreSQL假定它可以隨時寫任何想要的東西(即使沒有發生邏輯更新),也沒有真正的機會讓它與你提到的3個觸發器一起使用。

你可以做的是讓整個東西在RAM磁盤上運行,並讓一些操作系統進程將原子性地恢復爲永久存儲。這需要仔細的文件系統和內核支持。如果您的設備大部分時間處於這種狀態,這可能會有效,但如果您像電視機一樣打開和關閉,可能不太好,因爲恢復時間可能很煩人。

替代品正在使用更像嵌入式的RDBMS(如SQLite),或使用可處理PostgreSQL的存儲系統(如最近的固態驅動器),儘管某些SSD具有可能使其不適用於PostgreSQL的虛假緩存設置。

+0

+1。但是您不需要仔細的文件系統/內核支持,因爲PostgreSQL支持無縫的在線備份:http://www.postgresql.org/docs/8.1/static/backup-online。html – 2010-01-21 15:59:06

+1

@j_random_hacker但是,你仍然有一個問題,WAL段需要一直寫入備份存儲,這有點矛盾的想法,不寫所有的時間。 – 2010-01-21 20:15:17

+0

我認爲沒有必要不斷備份WAL日誌,但仔細閱讀它似乎是。在這種情況下,定期創建SQL轉儲(以及通過gzip或類似的管道)將是更好(更簡單)的方法:http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP- DUMP – 2010-01-22 03:01:07

相關問題