Как избежать увеличения размера файла в базе данных Киото Кабинета с использованием базы данных хэш-файлов? - PullRequest
4 голосов
/ 01 декабря 2010

Я использую следующее, чтобы открыть:

db.open("db.kch#tune_defrag=10000", DB.OWRITER | DB.OCREATE)

Я помещаю и удаляю элементы.В конце выполнения база данных «пуста», функция count () возвращает 0, потому что я удаляю все элементы.Почему размер файла всегда увеличивается, когда я повторяю тест?Можно ли запустить что-то вроде «сборщика мусора» для очистки удаленных регистров?Если я выполню один и тот же тест 100 раз, у меня будет база данных размером 500 МБ, даже у меня есть только 2 записи.

Я попытался поставить "tune_defrag = 10000", но я думаю, что он не работал нормально.

Обс .: единственный регистр меньше 1 КБ, я не понимаю, почему регистры занимают так много места на диске.

Спасибо за любую помощь

Ответы [ 4 ]

3 голосов
/ 11 февраля 2011

Попробуйте это:

db.kch#dfunit=8

Это означает, что KC запускает дефрагментацию для каждых 8 обнаруженных фрагментаций, и Mikio на самом деле рекомендует 8.используйте немного лака.

http://fallabs.com/kyotocabinet/command.html

2 голосов
/ 11 марта 2014

работает:

kchashmgr defrag path_to_kcabinet_file

- это то, что я делаю, чтобы получить размер файла db 'resized'.Я не нашел API-доступ к этому, поэтому я делаю это с помощью команды оболочки, используя утилиту kchashmgr (очевидно, это можно вызвать изнутри программы).

1 голос
/ 20 декабря 2010

Я не использовал этот конкретный БД, но в некоторых других случаях, чтобы решить эту проблему, нужно скопировать БД в новый, а затем удалить старый.Убедившись, что он хорошо скопирован:).

Я внедрил этот процесс в производственные системы, если он действительно очень хорошо закодирован и должен работать.

0 голосов
/ 01 декабря 2010

При беглом взгляде на документацию по Киото не видно, что у вас есть какой-либо способ изменить размер или иным образом очистить базу данных от удаленных записей ... или действительно управлять ею каким-либо образом в той или иной форме.

Этот проект, похоже, далек от того, чтобы быть "готовым к производству". Если вы действительно хотите реализовать это, я бы посоветовал связаться с владельцами проекта (http://fallabs.com/) и узнать, есть ли у них какие-либо планы относительно некоторых необходимых служебных функций.

В противном случае я бы предложил перейти на другую, более зрелую базу данных в стиле nosql.

...