2010-09-10 2 views
6

Я уже давно играю с этой идеей, но не видел никакой информации о людях, которые это делают. У меня есть небольшой проект веб-сайта, где мне нужно загрузить и изменить 1 объект. Этот объект довольно прост и не должен превышать нескольких килобайт. Вместо того, чтобы запускать БД для этого небольшого объема данных, почему бы просто не использовать pickle и/или shelve, чтобы сохранить эти данные и загрузить их? Я планирую использовать микро-веб-фреймворк, например, «Бутылка или фляжка» для проекта.Есть ли что-то не так с созданием веб-сайта Python Pickle?

Есть ли причины не использовать этот метод для загрузки данных? Он загружает файл pickle только в момент запуска Apache, поэтому я не думаю, что скорость будет выполнена (быстрее, чем запрос db).

Спасибо за любой ввод!

+0

Зачем использовать рассол? Почему не простой текст? Почему не исходный код Python для объекта? Зачем ограничивать травление объекта? –

+1

Есть ли причина не использовать что-то вроде SQLite? –

+1

@ S.Lott Объект содержит под-объекты, с некоторыми объектами datetime. В случае необходимости я мог бы сделать простой текст. На сайте есть страница, чтобы вставить немного новых данных, поэтому она не может быть в самом источнике. Я пытаюсь сохранить сайт простым, без БД, если он мне не нужен. –

ответ

3

Нет причин, по которым вы не можете реализовать сохранение объектов через стандартные модули Python pickle или shelve. Просто убедитесь, что ваши объекты чисты и надежно разборчивы. Масштабируемость может стать предметом беспокойства, если ваш сайт будет больше, чем ваш текущий объем, но до тех пор ваша идея должна работать нормально. Если этот день наступит, следующим очевидным шагом будет рассмотреть возможность использования превосходного Python SQLitemodule, который поставляется с предустановленными последними версиями языка.

+0

Что-то вроде MongoDB было бы более легким переходом от Pickle, чем SQL. –

+0

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

+0

@David MI давно работал с SQL, так что либо не было бы проблемой, я бы просто решил использовать MongoDB, чтобы получить больше опыта в NoSQL :) –

3

Я бы не написал маринованную строку в файл напрямую. Слишком много деталей низкого уровня, о которых можно беспокоиться. Ознакомьтесь с Durus, ZODB, или this post from FriendFeed о хранении объектов Python в MySQL.

Не отбрасывайте реляционные базы данных, хотя они дают вам много ударов прямо из коробки (даже для простых проектов).

+0

Спасибо за ссылки. Если я собираюсь использовать любую БД, это будет MongoDB. Я не думал о проблеме рамки, использующей несколько процессов python, и не имел доступа к одному и тому же объекту, если что-то было изменено. Это должно было вызвать какой-то флаг и каждый процесс перезагружать маринованный файл? Какие еще «детали низкого уровня беспокоятся»? Благодаря! –

1

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

Смежные вопросы