Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2012 14:40:04

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

Приветствую всех!
Задача:
Найти способ запихнуть кучу мелких файлов в один, плюс некоторое количество данных, которые относительно активно будут меняться.
Первое, что пришло на ум - zipfile или tarfile, но эксперименты закончились неудачно по причине того что без перепаковки всего архива, нельзя изменить один файл, нельзя удалить файл.
Задумываюсь о базе данных. sqlite3 использовать не получается, так как возникают проблемы при его сборке под android (скоро расскажу про это и покажу). То есть остается использовать базы данных, написанные на чистом питоне.
Из требований: более менее нормальная скорость. ~1000 файлов по 70-100 кб, ~1000 по 7-10 кб, и 50-100 кб данных.



Офлайн

#2 Июнь 5, 2012 14:52:44

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

ZODB?
Хотя там есть C-шные моменты.

Pure-python: dobbin: http://pypi.python.org/pypi/dobbin



Отредактировано regall (Июнь 5, 2012 14:53:59)

Офлайн

#3 Июнь 5, 2012 15:13:44

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

regall
Pure-python: dobbin: http://pypi.python.org/pypi/dobbin
Спасибо, буду пробовать. Сейчас посмотрел исходники, используется fcntl для лока файла. Его вроде нет в сборке питона под android, попробую вручную выпилить



Офлайн

#4 Июнь 5, 2012 17:02:06

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

Как это нет fcntl. Это же вроде бы стандартный POSIX вызов. Должен под любыми унихами работать.



Офлайн

#5 Июнь 5, 2012 17:14:01

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

Ed
Должен под любыми унихами работать.
Вечером потестирую, посмотрю, будет ли в сборке питона доступен этот модуль. Мне бы еще чтоб под виндой работало, так как приложение должно запускаться еще и так )
Сейчас еще обнаружил что “из коробки” есть модуль shelve. Вроде достаточно быстро работает. 1500 объектов извлек за 5 секунд. Правда не совсем экономно получается - 50 мб данных - 150 мб файл получается.



Отредактировано igor.kaist (Июнь 5, 2012 17:14:58)

Офлайн

#6 Июнь 5, 2012 17:27:55

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

igor.kaist
50 мб данных - 150 мб файл получается.
В sheleve оверхед, скорее всего, из-за того, что все данные pickle'тся. Не пробовали anydbm (shelve его использует)?

Отредактировано reclosedev (Июнь 5, 2012 17:29:36)

Офлайн

#7 Июнь 5, 2012 18:27:54

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Ищется pure python база данных.

Dobbin не ограничивает себя в потреблении оперативки, если этого не будет делать и система (её нужно об этом попросить), то на больших объёмах начнутся проблемы. Buzhug – нцать файлов создаёт. Про Cog ничего не помню. Про Gadfly тоже забыл что за зверь. Если не получилось собрать SQLite, может получится с bsddb3. А bsddb есть в батарейках (вообще-то полагается)?

..bw



Офлайн

#8 Июнь 6, 2012 07:49:30

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

Чем плох вариант хранения файликов как есть в отдельной папке? По крайней мере тех что будут меняться.

Офлайн

#9 Июнь 6, 2012 10:38:10

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

Если вам только для этого напишите простенькую свою. Быстрее будет, чем искать.



Офлайн

#10 Июнь 6, 2012 16:00:01

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Ищется pure python база данных.

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



Отредактировано igor.kaist (Июнь 6, 2012 23:22:15)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version