Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 25, 2011 03:26:57

rustavel
От:
Зарегистрирован: 2011-02-24
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет. Хранение словаря по средству cPickle.

Я не так давно програмирую и изначально начал большой (для меня) проэкт не зная о базах данных(mysql например) строя всё хранение данных
ч\з словарь и cPickle. Почти его закончил. Всё работает ‘вроде бы’ стабильно. Проэкт может быть запущен в реальную работу(для этого я его и писал). База предпологает хранение и динамическое редактирование данных порядка 3000 человек.

Но возникает вопрос :надёжен ли в моём случае способ хранения словаря как базы данных законсервированым ч\з cPickle или лучше подкорректировать весь код для работы с sqlite3 или с чем либо типа того?

Заранее благодарен!!



Офлайн

#2 Фев. 25, 2011 12:09:05

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

Нужен совет. Хранение словаря по средству cPickle.

Кроме надежности, подумайте еще про производительность.
У вас при сохранении изменений, заново придется пиклить весь словарь и сохранять. Да и все держать в оперативной памяти (не знаю, насколько у вас много данных). Базы данных как то более для этого подходят, ИМХО. Работать с базами данных, достаточно просто.



Офлайн

#3 Фев. 25, 2011 14:51:08

rustavel
От:
Зарегистрирован: 2011-02-24
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет. Хранение словаря по средству cPickle.

Благодарен ещё раз за ответ! Не подскажите где можно найти хорошую документацию на тему sqlite в python с нуля? Искал-не нашел то что нужно! Заранее благодарен!



Офлайн

#4 Фев. 25, 2011 16:28:38

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

Нужен совет. Хранение словаря по средству cPickle.

Официальная документация вполне хороша.
http://docs.python.org/library/sqlite3.html
Далее смотрите на сам язык запросов sql (если в этом трудности), например здесь:
http://www.intuit.ru/department/database/sql/
Все не так сложно, как кажется на первый взгляд. Вам всего то нужно на первое время CREATE TABLE, INSERT, SELECT, DELETE, UPDATE



Офлайн

#5 Фев. 25, 2011 16:57:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Нужен совет. Хранение словаря по средству cPickle.

В дополнение к igor.kaist могу сказать, что picke не всегда безболезненно переносятся на новую версию питона. Детали сильно зависят от - оно вам надо?



Офлайн

#6 Фев. 25, 2011 17:06:54

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Нужен совет. Хранение словаря по средству cPickle.

Андрей Светлов
В дополнение к igor.kaist могу сказать, что picke не всегда безболезненно переносятся на новую версию питона.
Хм… А с этого места можно подробнее?
Например, я использую ZODB, которая хранит внутри себя пиклы объектов. Могут быть проблемы чтения одной базы разными версиями питона?
Или я чего-то не так понял?



Офлайн

#7 Фев. 25, 2011 17:16:44

rustavel
От:
Зарегистрирован: 2011-02-24
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет. Хранение словаря по средству cPickle.

igor.kaist, при много спасиб! То что нужно!



Офлайн

#8 Фев. 25, 2011 17:40:30

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Нужен совет. Хранение словаря по средству cPickle.

ZZZ, подробней.
Pickle использует на сегодня три протокола, насколько я помню.

Текстовый (совместимый со всеми), бинарный старый и бинарный новый.
Так вот, бинарные основываются на marshal, который зависит от версии питона.
Вроде бы как сохранение простых объектов (int, str, tuple, list, dict) не приводило к неприятностям.
Неделю назад в рассылке python-dev увидел, что “простой” pickle из 2.7 не понимается 3.2.
В детали не вникал. Если нужно - прочитаю еще раз, более внимательно всю ветку.
Там, кажется, ломались строки - они начинали восприниматься как двухбайтный юникод с ожидаемыми последствиями.
Что будет дальше и влияет ли на 3.1 - не вникал. Будут держать обратную совместимость или объявят баг фичей - не знаю.
Проблема есть только с тройкой.



Офлайн

#9 Фев. 25, 2011 18:19:56

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Нужен совет. Хранение словаря по средству cPickle.

Хм… А я всегда думал, что marshal один везде… Наверное, что-то упустил.
Спасибо за разъяснение, буду иметь в виду и не буду сильно удивляться в случае проблем.

Андрей Светлов
В детали не вникал. Если нужно - прочитаю еще раз, более внимательно всю ветку.
Да нет, не надо. Думаю, что если мне понадобиться, я буду знать где искать. :-)



Офлайн

#10 Фев. 25, 2011 18:25:36

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Нужен совет. Хранение словаря по средству cPickle.

Нет. Как раз marshal в общем виде различается от версии к версии.
Именно поэтому .pyc для каждой версии питона разные - они представляют простой marshal кода модуля с заголовком в виде timestamp - ничего более.
Способ сохранения простых типов не меняется обычно - но Питон этому правилу старается следовать, не обещая ничего.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version