Форум сайта python.su
Пространства для Вашего Я, коллеги!
Пишу не в раздел по базам данных потому, что там принято обсуждать реляционные базы данных, а мне нужна именно иерархическая.
Требования:
- Иерархическая структура имён файлов (объектов?) внутри базы.
- Возможность открыть для чтения и записи файл, находящийся внутри базы.
- Возможность получить список файлов и их размер.
- Вся база должна быть в одном файле.
- Динамическое изменение размера файла (вакуумирование?).
- Межплатформенность и нормальная, без извращений, связь с питоном.
Как плюшку, хорошо бы иметь возможность прикреплять к файлам метаданные, но можно и обойтись.
Система прав и разрешений – фтопку!
Пойдёт ли для этих целей ZODB? И вообще, можно ли его юзать отдельно от Zope?
P.S. Только не надо предлагать мне создавать пустой файл и форматировать его в ext2… Ну или маковый dmg…
P.P.S. Я как-то разрабатывал файловую систему внутри PostgreSQL… Это было весело. :-)
Офлайн
что-то не понял, а в что тут осталось от базы данных? =)
Офлайн
Berkeley DB?
А зачем нужно:
ZZZ
Вся база должна быть в одном файле.
Офлайн
LexanderОн не умеет:
Berkeley DB?
ZZZ
- Возможность открыть для чтения и записи файл, находящийся внутри базы.
LexanderДля дистрибьюции, если можно так сказать. Пока просто присматриваюсь к разным вариантам пакета. Можно использовать обычный tar, но всё-таки хотелось бы возможность простого изменения содержимого, без перепаковки всего архива.
А зачем нужно:ZZZ
Вся база должна быть в одном файле.
Офлайн
ZZZМожет CompoundFile подойдет? Его используют M$ офисные документы и 1С. В pyExcelerator есть модуль для работы с ним.
Мы подумали и решии, что более точно это назвать файловой системой внутри файла с интервейсом доступа к нему.
Офлайн
ZODB самое то. Это standalone пакет. Есть тьюториалы на английском: 1-2 страницы. Все очень просто.
Офлайн
ZODB может и подойдет, все зависит от преобладающего режима работы с БД. Все таки ZODB пригодна больше для архивов всяких, которые относительно редко создаются и читаются.
2 ZZZ
А что подразумевается под
ZZZОткрыть для записи и залочить до окончания записи?
Возможность открыть для чтения и записи файл, находящийся внутри базы.
Офлайн
PooHНу это как-то не очень кошерно… Наверное у меня просто аллергия на продукты M$… :-)
Может CompoundFile подойдет? Его используют M$ офисные документы и 1С. В pyExcelerator есть модуль для работы с ним.
LexanderОткрыть для записи файл в базе данных. Не просто саму базу. А файлы там могут быть довольно приличных объёмов и в памяти не помемтиться.
Открыть для записи и залочить до окончания записи?
import FileDataBase
db = FileDataBase.open("/Users/zzz/file.db")
file1 = db.open("/file1", "rb")
file2 = db.open("/dir1/file2", "w+")
db.cd("/dir1") ## А почему бы и нет?
file3 = db.open("file3", "wb")
## Разные операции чтения/записи/обрезвания файлов...
## Никакая параллельность и транзакционность не требуется.
[f.close() for f in [file1, file2, file3]]
for fn in db.list_dir("/dir1"):
if fn.endswith(".gz"):
db.unlink("/dir1/%s" % fn)
db.mkdir("/dir3")
## Также хотелось бы иметь методы переименования, копирования...
## Аналоги shutils, os.path... Но это уже не так важно.
db.rename("file2", "/dir2/file2")
db.copy("file3", "/dir2/file3")
db.vacuum() ## Не представляю, как такое организуется без вакуумирования.
db.close()
Офлайн
ZODB НЕ Підходить!
1) Оптимізована тільки для читання.
2) Запис справді є дуже повільним і чим більша база - тим запис повільніший
3) Всередині всі дані розбиті на 64кб - бо вона призначена бля зберігання різної метаінформації, якигось даних, які мають якесь значення а не для бінарних файлів. Файли в ній зберігати просто не можна - вона не для того;
Є мінімізований варіант ZODB - Durus
Офлайн
Вот и мне так показалось.
Стоит ли близко присматриваться к Durus'у? Или оно тоже самое, только проще?
Офлайн