Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > организовать сохр\обход миллиона словарей


Автор: kulibinka 19.3.2007, 03:27
Суть задачи: есть статьи. Их количество около 1 000 000.

Для каждой из них расчитывается куча данных, сохраненных в списках\словарях.
Есть стандартная задача - пробежаться по всем этим данными и как-то их вместе обработать.

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

Но когда количество статей переваливает за несколько десятков тысяч начинаются проблемы (даже 10 000 файликов это уже довольно серьезная проблема smile ).

Само собой напрашивается использование базы данных, но для каждого поля сериализировать и при необходимости рассериализировать списки\словари каждый раз это никому не нужный и большущий расход ресурсов.

Пытался использовать pytables (которые в принципе создан для похожих задач), но он при сериализации коцает данные, и их после этого невозможно достать (да и сериализация затратная).

Возможно, есть базы данных типа pytables, но которые напрямую позволяют без проблем и прозрачно сохранять данные родных питоновских типов... А возможно нужно использовать какой-то кардинально другой способ...

Подскажите пожалуйста: как организовать сохранение и обход миллиона (или нескольких) списков\словарей на обычной машине? 

Автор: pythonwin 19.3.2007, 07:18
Цитата(kulibinka @  19.3.2007,  06:27 Найти цитируемый пост)
Суть задачи: есть статьи. Их количество около 1 000 000.

думаю лучше субд + хорошо обдумать сериализацию
http://www.python.com.ua/forum/viewtopic.php?id=570 

Автор: Бонифаций 19.3.2007, 15:07
а в shelve не пробовал класть?

Автор: kulibinka 19.3.2007, 16:09
Цитата

а в shelve не пробовал класть?


Не пробовал... А разве при shelve.open(filename) не идет загрузка всего объекта в память?

Автор: Бонифаций 19.3.2007, 16:38
shelve это надстройка над dbm (или gdbm), которая позволяет в этих базах хранить pickle обьекты. так что в памяти будут те обьекты которые ты считал. 



Автор: kulibinka 19.3.2007, 17:28
Звучит по теме.
Спасибо за наводку, пошел разбираться.

Автор: pythonwin 20.3.2007, 07:17
Цитата(Бонифаций @  19.3.2007,  19:38 Найти цитируемый пост)
shelve это надстройка над dbm (или gdbm), которая позволяет в этих базах хранить pickle обьекты. так что в памяти будут те обьекты которые ты считал. 

а для этой задачи ZODB использовать можно ?

Автор: kulibinka 21.3.2007, 14:34
Цитата

а для этой задачи ZODB использовать можно ? 


Второй день думаю над вопросом, так и ничего и не придумал smile
Можно по другому вопрос поставить?

Автор: pythonwin 21.3.2007, 14:51
Цитата(kulibinka @  21.3.2007,  17:34 Найти цитируемый пост)

Второй день думаю над вопросом, так и ничего и не придумал smile
Можно по другому вопрос поставить? 

а может просто озвучишь всю задачу
пока вижу решение в том чтобы использовать субд + сериализацию использовать минимальное кол-во раз == один раз твои файлики просто записать в БД, если они имеют определенную структуру (думаю именно так)
smile

Автор: kulibinka 21.3.2007, 15:10
Цитата

а может просто озвучишь всю задачу

да задачу я, кажется, озвучил в первом посте. Или там что-то неописано?

Цитата

пока вижу решение в том чтобы использовать субд + сериализацию использовать минимальное кол-во раз == один раз твои файлики просто записать в БД, если они имеют определенную структуру (думаю именно так)

Ну, других решений я пока тоже не вижу.
"сериализацию использовать минимальное кол-во раз" - ну а как сделать чтобы минимальное? Я ведь в файликах информацию сериализовал, но это некрасиво каждый раз ее рассериализировать - неоптимально...


Цитата

а для этой задачи ZODB использовать можно


А как связаны ZODB (насколько я понял, это  база данных для zope) и эта задача?

Автор: dvska 26.3.2007, 17:08
Цитата(kulibinka @ 21.3.2007,  15:10)
Цитата

а для этой задачи ZODB использовать можно


А как связаны ZODB (насколько я понял, это  база данных для zope) и эта задача?

ZODB это pythonic ООДБ, да, изначально cозданная для Zope. 
Можно посмотреть также в сторону Durus http://www.mems-exchange.org/software/durus/

Автор: kulibinka 26.3.2007, 23:15
Спасибо за Durus, обязательно попробую.

Автор: dvska 28.3.2007, 17:50
kulibinka, когда что-нибудь получится, поделись опытом! 

Автор: kulibinka 28.3.2007, 18:33
Как всегда - обязательно smile

Автор: dvska 30.3.2007, 18:49
А ещё бывают http://pypersyst.org и http://schevo.org ;)

Автор: kulibinka 30.3.2007, 19:14
И это очень хорошо, спасибо smile
Я сейчас добью одну "горящую" задачу, и тогда можно будет с чистой совестью и в полную силу приступить к испытаниям.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)