2012-01-08 84 views
0

我使用java版本的BerkeleyDB,DPL。從berkeley db中刪除主索引

在將數據解析到BerkeleyDB時,我在特定的PrimaryIndex中存儲了一些時態信息。這PrimaryIndex佔用大量的空間,我想放棄存儲在那裏的所有數據,並釋放HD上使用的空間。

什麼是最簡單的方法來做到這一點?

謝謝。

回答

0

不知道更多細節,您可能需要重寫數據,而無需刪除所需信息。但是,除非你想節省數百GB,否則我不會打擾。如果你需要的話,我會得到更多的磁盤空間。

+0

我的db是〜45Gb,我懷疑其中一半是我不需要的時間信息。 BDB中的DROP TABLE沒有任何等效性嗎? – jutky 2012-01-08 12:23:04

+1

DROP TABLE將刪除整個表和所有的信息(不僅僅是你想擺脫的列),我懷疑你想要有效的ALTER TABLE。 – 2012-01-08 12:26:17

+0

20 GB的價值約爲1英鎊。如果它很簡單,它的價值就在於此,但我懷疑它沒有,也許不值得擔心。 – 2012-01-08 12:30:04

1

原則上,您可能需要:

  • 修改表結構,主索引更改爲另一列,因爲BDB表需要一個主鍵
  • 修改表結構刪除您的列中沒有更長想

彼得是對的,我們需要更具體的細節(比如表結構DDL)才能給我們任何具體的答案。

參見:

+0

我沒有任何表結構,我使用直接持久層(DPL)。我的java對象存儲在BTrees中,我只是在這些對象上指定主鍵(帶註釋)。 – jutky 2012-01-08 12:26:25

+0

對不起 - 我錯過了你的問題的第一行。我只通過SQL處理程序(如MySQL)使用BDB。我認爲彼得是正確的 - 您可能需要創建一個新的數據結構並將數據遷移到其中。 – 2012-01-08 12:30:00

0

我相信你需要做到以下幾點:

  1. 創建一個新的表結構,你想要的架構
  2. 從舊結構中讀取每一行並將其遷移到新結構中,隨着您的進行修改(刪除/以其他方式變更數據)
  3. 如果空間問題即使是暫時性的,桌子隨你去

以上是否合適取決於細節。

這對使用ALTER TABLE語法的SQL數據庫來說會更容易一些,但我希望有設計決策的原因(可能基於性能)。