2012-01-04 104 views
1

這與我以前的問題Click here一起使用。 我們正在使用的Berkeley DB用於臨時存儲被處理並存儲到關係DB.The問題出現之前,當超過一定point.Now大小增加,我們必須要麼將文件分割成較小的或壓縮現有files.In這個問題我想問一下壓縮部分,berkeley DB是否有內置的壓縮​​工具,或者我們是否需要編程。如果它是內置的,那麼它總是會更快。Berkeley DB文件壓縮

回答

2

here

據伯克利的常見問題有(前壓縮)優化它的方法有兩種:

  1. 緊湊
  2. 真空

您還可以實現您的自己的壓縮算法如here所示。

來自SQLite的Berkeley DB VACUUM有什麼不同?

的SQLite 實現真空命令爲數據庫轉儲,然後從轉儲 完整的重新加載。這是一項昂貴的操作,在整個操作期間鎖定整個數據庫。這也是一個全部或全無的操作。要麼它工作,要麼失敗,你必須在某個時候再次嘗試 。當SQLite完成時,由於從轉儲文件中按順序鍵入 數據,因此數據庫的大小通常較小(文件大小較小),並且btree的組織(淺)比以前要好( )。 SQLite,它的工作原理以及你可以承受的數據鎖定每個人,都會很好地完成VACUUM。 Berkeley DB以完全不同的方式解決這個問題。對於許多 版本現在的Berkeley DB的B樹的實現不得不壓縮能力 而其他算子的研究是在飛行中。壓實是 方法,其中的B樹的節點被檢查,並且當小於 最佳的,它們被重新組織(反向分裂,等)。 B-Tree越淺,在葉節點 處查找數據所需的查找次數越少。伯克利DB可以一次緊湊樹的部分,或整個樹 。對於7x24x365(五個9)的操作,這是至關重要的。緊湊版的BDB 不會對正在進行的數據庫操作產生不利影響 而SQLite的方法確實如此。但是壓縮並不能解決數據庫中的空的 部分(數據庫文件中刪除了 數據的部分)。 Berkeley DB的也由文件內移動數據,然後截斷返回該空間文件系統文件 支持數據庫的壓縮 文件。從Berkeley DB版本5.1起,VACUUM命令將壓縮並壓縮數據庫文件。 此操作比SQLite 的轉儲/加載方法需要更多時間,因爲它正在執行更多工作以允許數據庫保持 的可操作性。我們認爲這是正確的權衡,但如果您不同意,您可以隨時在代碼中轉儲/加載數據庫。

+0

經過長時間的戰鬥。現在我確信壓縮並不能提高性能。現在我已經放棄了壓縮的整個想法,並想到在硬件級別(如RAID)實施優化。 – Madusudanan 2012-11-15 07:21:57

+1

但至少你節省了磁盤? – skan 2013-08-28 12:55:06