如何清理FoundationDB?

7

有没有一种快速删除本地数据库中所有数据的方法?就像SQL语句中的'drop database'命令一样?

我查阅了文档,但还没有找到任何有趣的信息。

3个回答

13

使用"CLI"命令行方式

通过提供的 fdbcli 接口,您可以使用单个 clearrange 命令清除数据库中的所有键,如下所示:

fdb> writemode on
fdb> clearrange "" \xFF
Committed (68666816293119)

请注意,此方法会立即执行且无法撤消!

此外,任何仍与数据库连接的应用程序可能会继续使用缓存的目录子空间前缀读取/写入数据,这可能会引起数据损坏!在集群中没有活跃使用时才应使用此方法。

此方法要求您的集群处于工作状态,它不会立即回收磁盘上使用的空间,并且也不会重置集群的读取版本。

较为复杂的方法

如果您有单节点集群,则可以停止fdb服务,删除其文件夹中的所有文件,重新启动服务,然后使用执行命令。

这将回收以前使用的磁盘空间,并将一切重置回安装后的状态。


执行“配置新的单个SSD”命令。 - TJIC
你说得对,我已经用正确的关键字修复了该命令。 - Christophe Chevalier

7
您可以通过清除整个键的范围来实现此操作。 在Python中,它看起来像这样:
Database.clear_range('', '\xFF')

根据clear_range文档,''是默认的切片开始位置,'\xFF'是默认的切片结束位置。

您可以在文档中找到有关所使用API的clear_range更多信息。


2
Java 版本:public void clearDB() { db.run(new Function() { public Void apply(final Transaction tr) { tr.clear(new Range(Tuple.from("").pack(), Tuple.from("xFF").pack())); return null; } }); } - irytek102

1

在Java中以编程方式实现此操作:

db.run(tx -> {
            final byte[] st = new Subspace(new byte[]{(byte) 0x00}).getKey();
            final byte[] en = new Subspace(new byte[]{(byte) 0xFF}).getKey();
            tx.clear(st, en);
            return null;
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接