Java 从berkeley db中删除主索引

Java 从berkeley db中删除主索引,java,berkeley-db-je,Java,Berkeley Db Je,我使用BerkeleyDB的java版本,DPL 在将数据解析到BerkeleyDB时,我将一些时间信息存储在特定的PrimaryIndex中。这个PrimaryIndex占用了很多空间,我想删除存储在那里的所有数据,释放硬盘上使用的空间 最简单的方法是什么 谢谢。在不了解更多详细信息的情况下,您可能需要重新写入数据,而不需要删除信息。但是,除非您希望节省数百GB的空间,否则我不会麻烦您。如果您需要,我会获得更多的磁盘空间。原则上,您可能需要: 更改表结构以将主索引更改为另一列,因为BDB表需

我使用BerkeleyDB的java版本,DPL

在将数据解析到BerkeleyDB时,我将一些时间信息存储在特定的PrimaryIndex中。这个PrimaryIndex占用了很多空间,我想删除存储在那里的所有数据,释放硬盘上使用的空间

最简单的方法是什么


谢谢。

在不了解更多详细信息的情况下,您可能需要重新写入数据,而不需要删除信息。但是,除非您希望节省数百GB的空间,否则我不会麻烦您。如果您需要,我会获得更多的磁盘空间。

原则上,您可能需要:

  • 更改表结构以将主索引更改为另一列,因为BDB表需要主键
  • 更改表结构以删除不再需要的列
Peter是对的,我们需要更具体的细节(比如表结构DDL),然后才能给您任何具体的答案

见:

  • (用于BerkleyDB引擎的MySQL文档)
  • (表结构DDL)

    • 我认为您需要执行以下操作:

    • 使用所需的体系结构创建一个新的表结构
    • 从旧结构中读取每一行,并将其迁移到新结构中,同时进行修改(删除/更改数据)
    • 如果需要占用空间,即使是暂时占用,也可以在运行时从旧表中删除数据
    • 以上各项是否适用将取决于细节


      使用ALTER TABLE语法的SQL数据库更容易做到这一点,但我认为您的设计决策(可能基于性能)是有原因的。

      我的数据库容量约为45Gb,我怀疑其中一半是我不需要的时间信息。BDB中的DROP TABLE没有任何等价物吗?DROP TABLE将删除整个表以及包含在中的所有信息(不仅仅是您要删除的列),我怀疑您希望有效地修改表。20 GB大约值1英镑。如果它简单的话,这是值得做的,但我怀疑它不值得,也可能不值得担心。我没有任何表结构,我使用的是直接持久层(DPL)。我的java对象存储在BTrees中,我只是在这些对象上指定主键(带注释)。我只通过SQL处理程序(比如MySQL)使用过BDB。我认为Peter是对的——您可能需要创建一个新的数据结构并将数据迁移到其中。