Понятно ... Вы действительно обеспокоены скоростью удаления одной записи за раз из file_archive
.
Хорошо, я согласен.Использование __delitem__
или pop
на file_archive
немного жестоко, если вы хотите удалить несколько записей.Замедление происходит из-за file_archive
необходимости загружать и перезаписывать весь файловый архив для каждого удаляемого ключа.Это не относится к dir_archive
или многим другим архивам ... но для file_archive
это так.Так что это должно быть исправлено ...
ОБНОВЛЕНИЕ: Я добавил новый метод, который должен позволять более быстрое удаление указанных ключей ...
>>> import klepto as kl
>>> ar = kl.archives.file_archive('foo.pkl')
>>> ar['a'] = 1
>>> ar['b'] = 2
>>> ar['c'] = 3
>>> ar['d'] = 4
>>> ar['e'] = 5
>>> ar.dump()
>>> ar.popkeys(list('abx'), None)
[1, 2, None]
>>> ar.sync(clear=True)
>>> ar
file_archive('foo.pkl', {'c': 3, 'e': 5, 'd': 4}, cached=True)
>>> ar.archive
file_archive('foo.pkl', {'c': 3, 'e': 5, 'd': 4}, cached=False)
Ранее(то есть в выпущенных версиях), вы можете дешево pop
ключи, которые вы хотите из локального кэша, а затем сделать ar.sync(clear=True)
, чтобы удалить связанные ключи в архиве.Однако для этого необходимо, чтобы у вас были все ключи, которые вы хотите сохранить в памяти.Таким образом, вместо загрузки всех ключей в память, теперь вы можете (по крайней мере, в версии, которая скоро выйдет) сделать popkeys
как в кеше, так и / или в архиве, чтобы удалить любые ненужные ключи из любого из них.