| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > организовать сохр\обход миллиона словарей |
| Автор: kulibinka 19.3.2007, 03:27 |
| Суть задачи: есть статьи. Их количество около 1 000 000. Для каждой из них расчитывается куча данных, сохраненных в списках\словарях. Есть стандартная задача - пробежаться по всем этим данными и как-то их вместе обработать. Раньше я для каждой из статей найденные данные через модуль маршал сохранял в файликах, и при необходимости подтягивал. Но когда количество статей переваливает за несколько десятков тысяч начинаются проблемы (даже 10 000 файликов это уже довольно серьезная проблема Само собой напрашивается использование базы данных, но для каждого поля сериализировать и при необходимости рассериализировать списки\словари каждый раз это никому не нужный и большущий расход ресурсов. Пытался использовать pytables (которые в принципе создан для похожих задач), но он при сериализации коцает данные, и их после этого невозможно достать (да и сериализация затратная). Возможно, есть базы данных типа pytables, но которые напрямую позволяют без проблем и прозрачно сохранять данные родных питоновских типов... А возможно нужно использовать какой-то кардинально другой способ... Подскажите пожалуйста: как организовать сохранение и обход миллиона (или нескольких) списков\словарей на обычной машине? |
| Автор: pythonwin 19.3.2007, 07:18 |
думаю лучше субд + хорошо обдумать сериализацию http://www.python.com.ua/forum/viewtopic.php?id=570 |
| Автор: Бонифаций 19.3.2007, 15:07 |
| а в shelve не пробовал класть? |
| Автор: kulibinka 19.3.2007, 16:09 | ||
Не пробовал... А разве при shelve.open(filename) не идет загрузка всего объекта в память? |
| Автор: Бонифаций 19.3.2007, 16:38 |
| shelve это надстройка над dbm (или gdbm), которая позволяет в этих базах хранить pickle обьекты. так что в памяти будут те обьекты которые ты считал. |
| Автор: kulibinka 19.3.2007, 17:28 |
| Звучит по теме. Спасибо за наводку, пошел разбираться. |
| Автор: kulibinka 21.3.2007, 14:34 | ||
Второй день думаю над вопросом, так и ничего и не придумал Можно по другому вопрос поставить? |
| Автор: pythonwin 21.3.2007, 14:51 | ||
а может просто озвучишь всю задачу пока вижу решение в том чтобы использовать субд + сериализацию использовать минимальное кол-во раз == один раз твои файлики просто записать в БД, если они имеют определенную структуру (думаю именно так) |
| Автор: kulibinka 21.3.2007, 15:10 | ||||||
да задачу я, кажется, озвучил в первом посте. Или там что-то неописано?
Ну, других решений я пока тоже не вижу. "сериализацию использовать минимальное кол-во раз" - ну а как сделать чтобы минимальное? Я ведь в файликах информацию сериализовал, но это некрасиво каждый раз ее рассериализировать - неоптимально...
А как связаны ZODB (насколько я понял, это база данных для zope) и эта задача? |
| Автор: dvska 26.3.2007, 17:08 | ||||
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 |
| Как всегда - обязательно |
| Автор: dvska 30.3.2007, 18:49 |
| А ещё бывают http://pypersyst.org и http://schevo.org ;) |
| Автор: kulibinka 30.3.2007, 19:14 |
| И это очень хорошо, спасибо Я сейчас добью одну "горящую" задачу, и тогда можно будет с чистой совестью и в полную силу приступить к испытаниям. |