Найти - Пользователи
Полная версия: Ищется pure python база данных.
Начало » Базы данных » Ищется pure python база данных.
1 2
igor.kaist
Приветствую всех!
Задача:
Найти способ запихнуть кучу мелких файлов в один, плюс некоторое количество данных, которые относительно активно будут меняться.
Первое, что пришло на ум - zipfile или tarfile, но эксперименты закончились неудачно по причине того что без перепаковки всего архива, нельзя изменить один файл, нельзя удалить файл.
Задумываюсь о базе данных. sqlite3 использовать не получается, так как возникают проблемы при его сборке под android (скоро расскажу про это и покажу). То есть остается использовать базы данных, написанные на чистом питоне.
Из требований: более менее нормальная скорость. ~1000 файлов по 70-100 кб, ~1000 по 7-10 кб, и 50-100 кб данных.
regall
ZODB?
Хотя там есть C-шные моменты.

Pure-python: dobbin: http://pypi.python.org/pypi/dobbin
igor.kaist
regall
Pure-python: dobbin: http://pypi.python.org/pypi/dobbin
Спасибо, буду пробовать. Сейчас посмотрел исходники, используется fcntl для лока файла. Его вроде нет в сборке питона под android, попробую вручную выпилить
Ed
Как это нет fcntl. Это же вроде бы стандартный POSIX вызов. Должен под любыми унихами работать.
igor.kaist
Ed
Должен под любыми унихами работать.
Вечером потестирую, посмотрю, будет ли в сборке питона доступен этот модуль. Мне бы еще чтоб под виндой работало, так как приложение должно запускаться еще и так )
Сейчас еще обнаружил что “из коробки” есть модуль shelve. Вроде достаточно быстро работает. 1500 объектов извлек за 5 секунд. Правда не совсем экономно получается - 50 мб данных - 150 мб файл получается.
reclosedev
igor.kaist
50 мб данных - 150 мб файл получается.
В sheleve оверхед, скорее всего, из-за того, что все данные pickle'тся. Не пробовали anydbm (shelve его использует)?
bw
Dobbin не ограничивает себя в потреблении оперативки, если этого не будет делать и система (её нужно об этом попросить), то на больших объёмах начнутся проблемы. Buzhug – нцать файлов создаёт. Про Cog ничего не помню. Про Gadfly тоже забыл что за зверь. Если не получилось собрать SQLite, может получится с bsddb3. А bsddb есть в батарейках (вообще-то полагается)?

..bw
o7412369815963
Чем плох вариант хранения файликов как есть в отдельной папке? По крайней мере тех что будут меняться.
Ed
Если вам только для этого напишите простенькую свою. Быстрее будет, чем искать.
igor.kaist
o7412369815963
Чем плох вариант хранения файликов как есть в отдельной папке? По крайней мере тех что будут меняться.
Плохо тем, что это все нужно кидать на различные устройства. Легче скопировать один большой файл, чем файл с тысячами мелких.
Ed
Если вам только для этого напишите простенькую свою. Быстрее будет, чем искать.
В итоге прихожу как раз к этому. bsddb в батарейках не оказалось, его anydbm использует. То есть shelve нет смысла использовать.
upd:
В итоге я к этому пришел. За час написал реализацию простейшего хранилища, по производительности очень даже хорошо:
Файлы пишутся последовательно друг за другом. В конце блок метаданных со списком файлов (имя, адрес начала, длинна) и в завершении файла - длинна блока метаданных. Когда нужно добавить файл, дозаписываем, урезаем файл в том месте где заголовок (truncate) и дозаписываем измененный блок метаданных. Часто изменяемые данные хранятся в этом самом блоке метаданных (50-100 кб).
При удалении (в приложении файлы удаляются не по одному, а сразу по много и редко), файл пересобирается.
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