Найти - Пользователи
Полная версия: Иерархическая база данных
Начало » Python для экспертов » Иерархическая база данных
1 2 3 4 5 6 7
ZZZ
Пространства для Вашего Я, коллеги!

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

Требования:
- Иерархическая структура имён файлов (объектов?) внутри базы.
- Возможность открыть для чтения и записи файл, находящийся внутри базы.
- Возможность получить список файлов и их размер.
- Вся база должна быть в одном файле.
- Динамическое изменение размера файла (вакуумирование?).
- Межплатформенность и нормальная, без извращений, связь с питоном.

Как плюшку, хорошо бы иметь возможность прикреплять к файлам метаданные, но можно и обойтись.
Система прав и разрешений – фтопку!

Пойдёт ли для этих целей ZODB? И вообще, можно ли его юзать отдельно от Zope?

P.S. Только не надо предлагать мне создавать пустой файл и форматировать его в ext2… Ну или маковый dmg
P.P.S. Я как-то разрабатывал файловую систему внутри PostgreSQL… Это было весело. :-)
shiza
что-то не понял, а в что тут осталось от базы данных? =)
Lexander
Berkeley DB?

А зачем нужно:
ZZZ
Вся база должна быть в одном файле.
ZZZ
Lexander
Berkeley DB?
Он не умеет:
ZZZ
- Возможность открыть для чтения и записи файл, находящийся внутри базы.
Lexander
А зачем нужно:
ZZZ
Вся база должна быть в одном файле.
Для дистрибьюции, если можно так сказать. Пока просто присматриваюсь к разным вариантам пакета. Можно использовать обычный tar, но всё-таки хотелось бы возможность простого изменения содержимого, без перепаковки всего архива.

Мы подумали и решии, что более точно это назвать файловой системой внутри файла с интервейсом доступа к нему.
PooH
ZZZ
Мы подумали и решии, что более точно это назвать файловой системой внутри файла с интервейсом доступа к нему.
Может CompoundFile подойдет? Его используют M$ офисные документы и 1С. В pyExcelerator есть модуль для работы с ним.
tretiy3
ZODB самое то. Это standalone пакет. Есть тьюториалы на английском: 1-2 страницы. Все очень просто.
Lexander
ZODB может и подойдет, все зависит от преобладающего режима работы с БД. Все таки ZODB пригодна больше для архивов всяких, которые относительно редко создаются и читаются.

2 ZZZ
А что подразумевается под
ZZZ
Возможность открыть для чтения и записи файл, находящийся внутри базы.
Открыть для записи и залочить до окончания записи?

Berkeley DB в поставке Concurrent Data Store или Transactional Data Store “uses locks to manage multiple readers, and a single writer orchestrating their concurrent access to data within the databases”.
ZZZ
PooH
Может CompoundFile подойдет? Его используют M$ офисные документы и 1С. В pyExcelerator есть модуль для работы с ним.
Ну это как-то не очень кошерно… Наверное у меня просто аллергия на продукты M$… :-)

На ZODB ночью гляну, интересно.

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()
В голове уже даже нарисавался примерный план возможной архитектуры такой базы данных…
Надо попробовать подрядить какого-нить новичка для тренировки и полезного дела… С одной стороны поднимет свой уровень и создаст свой первый проект под патронажем “деда”, с другой мы получим красивую и удобную либу. Есть желающие? :-)
Нужно чёдко понимать что я такого страшного понаписал выше, знать что такое inode, кластер, Pickle, struct и "файловый объект"… Ну ещё StringIO… Мнэээ… Понимание того, что такое класс, с чем его едят и на кой хрен придумали тоже обязаловкой… Блин, много всего, оказывается, надо! Так ко всему этому привыкаешь, что уже не отдаёшь себе отчёта в том, что когда-то этого не знал и не понимал…
crchemist
ZODB НЕ Підходить!
1) Оптимізована тільки для читання.
2) Запис справді є дуже повільним і чим більша база - тим запис повільніший
3) Всередині всі дані розбиті на 64кб - бо вона призначена бля зберігання різної метаінформації, якигось даних, які мають якесь значення а не для бінарних файлів. Файли в ній зберігати просто не можна - вона не для того;

Є мінімізований варіант ZODB - Durus
ZZZ
Вот и мне так показалось.
Стоит ли близко присматриваться к Durus'у? Или оно тоже самое, только проще?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB