从berkeley db中删除主索引
我使用java版本的BerkeleyDB,DPL。从berkeley db中删除主索引
在将数据解析到BerkeleyDB时,我在特定的PrimaryIndex中存储了一些时态信息。这PrimaryIndex占用大量的空间,我想放弃存储在那里的所有数据,并释放HD上使用的空间。
什么是最简单的方法来做到这一点?
谢谢。
不知道更多细节,您可能需要重写数据,而无需删除所需信息。但是,除非你想节省数百GB,否则我不会打扰。如果你需要的话,我会得到更多的磁盘空间。
原则上,您可能需要:
- 修改表结构,主索引更改为另一列,因为BDB表需要一个主键
- 修改表结构删除您的列中没有更长想
彼得是对的,我们需要更具体的细节(比如表结构DDL)才能给我们任何具体的答案。
参见:
- http://dev.mysql.com/doc/refman/5.0/en/bdb-characteristics.html(MySQL的为BerkleyDB引擎文档)
- http://en.wikipedia.org/wiki/Data_Definition_Language(表结构DDL)
我没有任何表结构,我使用直接持久层(DPL)。我的java对象存储在BTrees中,我只是在这些对象上指定主键(带注释)。 – jutky 2012-01-08 12:26:25
对不起 - 我错过了你的问题的第一行。我只通过SQL处理程序(如MySQL)使用BDB。我认为彼得是正确的 - 您可能需要创建一个新的数据结构并将数据迁移到其中。 – 2012-01-08 12:30:00
我相信你需要做到以下几点:
- 创建一个新的表结构,你想要的架构
- 从旧结构中读取每一行并将其迁移到新结构中,随着您的进行修改(删除/以其他方式变更数据)
- 如果空间问题即使是暂时性的,桌子随你去
以上是否合适取决于细节。
这对使用ALTER TABLE语法的SQL数据库来说会更容易一些,但我希望有设计决策的原因(可能基于性能)。
我的db是〜45Gb,我怀疑其中一半是我不需要的时间信息。 BDB中的DROP TABLE没有任何等效性吗? – jutky 2012-01-08 12:23:04
DROP TABLE将删除整个表和所有的信息(不仅仅是你想摆脱的列),我怀疑你想要有效的ALTER TABLE。 – 2012-01-08 12:26:17
20 GB的价值约为1英镑。如果它很简单,它的价值就在于此,但我怀疑它没有,也许不值得担心。 – 2012-01-08 12:30:04