Как почистить FoundationDB?
Есть ли быстрый способ удалить все данные из локальной базы данных? Как SQL 'отбросить базу данных'?
Я просматривал документацию, но пока не нашел ничего интересного.
4 ответа
Вы можете сделать это, очистив весь диапазон клавиш.
В Python это выглядит так:
Database.clear_range('', '\xFF')
Где '' - начало слайса по умолчанию, а '\xFF' - конец слайса по умолчанию, в соответствии с clear_range
документация.
Более подробную информацию о clear_range для API, который вы используете, вы можете найти в документации.
Путь "CLI"
Используя предоставленные fdbcli
интерфейс, вы можете очистить все ключи в базе данных, используя один clearrange
команда, как это:
fdb> writemode on
fdb> clearrange "" \xFF
Committed (68666816293119)
Имейте в виду, что он выполняется мгновенно и отмена невозможна!
Кроме того, любое приложение, все еще подключенное к базе данных, может продолжить чтение / запись данных с использованием префиксов подпространства кэшированного каталога, что может привести к повреждению данных! Вы должны убедиться, что используете этот метод только тогда, когда ничто активно не использует кластер.
Этот метод требует, чтобы ваш кластер был в рабочем состоянии, и он не будет немедленно восстанавливать пространство, используемое на диске, а также не будет сбрасывать версию чтения кластера.
Трудный путь
Если у вас кластер с одним узлом, вы можете остановить службу fdb, удалить все файлы в ее data_dir
папку, перезапустите службу, а затем с помощью fdbcli
выполнить create new single ssd
команда.
Это восстановит дисковое пространство, использованное ранее, и вернет все обратно в состояние после установки.
Чтобы сделать это программно в 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;
});
Я думаю, что метод CLI не точен: '' не кажется абсолютным первым ключом. Возможно, придется сделать это:
fdb> writemode on
fdb> clearrange \x00 \xFF