从berkeley db中删除主索引

问题描述:

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

在将数据解析到BerkeleyDB时,我在特定的PrimaryIndex中存储了一些时态信息。这PrimaryIndex占用大量的空间,我想放弃存储在那里的所有数据,并释放HD上使用的空间。

什么是最简单的方法来做到这一点?

谢谢。

不知道更多细节,您可能需要重写数据,而无需删除所需信息。但是,除非你想节省数百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

原则上,您可能需要:

  • 修改表结构,主索引更改为另一列,因为BDB表需要一个主键
  • 修改表结构删除您的列中没有更长想

彼得是对的,我们需要更具体的细节(比如表结构DDL)才能给我们任何具体的答案。

参见:

+0

我没有任何表结构,我使用直接持久层(DPL)。我的java对象存储在BTrees中,我只是在这些对象上指定主键(带注释)。 – jutky 2012-01-08 12:26:25

+0

对不起 - 我错过了你的问题的第一行。我只通过SQL处理程序(如MySQL)使用BDB。我认为彼得是正确的 - 您可能需要创建一个新的数据结构并将数据迁移到其中。 – 2012-01-08 12:30:00

我相信你需要做到以下几点:

  1. 创建一个新的表结构,你想要的架构
  2. 从旧结构中读取每一行并将其迁移到新结构中,随着您的进行修改(删除/以其他方式变更数据)
  3. 如果空间问题即使是暂时性的,桌子随你去

以上是否合适取决于细节。

这对使用ALTER TABLE语法的SQL数据库来说会更容易一些,但我希望有设计决策的原因(可能基于性能)。