-
Приветствую!
Как вы считаете есть смысл использовать Django с noSQL, с MongoDB в частности?
Т.к. без ORM от Django мало что остается, может лучше предпочесть другие пайтоновские фреймворки? Просто не работал с другими, не могу судить.
С уважением, -
Как вы считаете есть смысл использовать Django с noSQL, с MongoDB в частности?
Да, вполне. Просто потому что Django сама по себе мало что меняет в этом выборе. Выбор хранилища стоит основывать на том, какие у вас данные.
Т.к. без ORM от Django мало что остается
А это совсем заблуждение... ORM сильно желателен, только если вам хочется джанговскую админку использовать.
-
есть бэкэнд django-mongodb - можно использовать с джанговской orm.
но вообще я использовал просто pymongo -
Исходил из того что "теряются" многие связанные с моделями фичи, вроде авторизации/сессий и связанного с ними.
-
есть бэкэнд django-mongodb - можно использовать с джанговской orm.
но вообще я использовал просто pymongopymongo хорош сам по себе, смысла во всех этих костылях сам не вижу. -
Выбор хранилища стоит основывать на том, какие у вас данные.
именно. Если часть данных хорошо лежит в РСУБД (те же пользователи), то и храните их в РСУБД. Ничто не мешает совмещать ту же монгу с sql-решениями. И хранить данные там, где им лучше, а не все в монге/коуче (т.к. круче) и не все в mysql (т.к. привычнее). Смотрите, какие у Вас данные, что с ними планируется делать, и принимайте решение.
Насчет сомнений, конкретно: сессии на базу вообще не завязаны. Auth-бэкенд для авторизация без привязки к джанговскому ORM и SQL пишется за пару минут.
-
Ну вот у меня как раз пользователи и ещё некоторые вещи хранились в рсубд, при этом висели сигналы, при создании пользователя для него заводилась коллекция в mongo. Также у моделей были методы, которые выбирали нужные данные через pymongo.
-
pawnhearts, исходники где-нибудь можно посмотреть? у меня сейчас как раз подобные задачи стоят. вдруг увижу умные мысли :)
-
igorekk что именно интересует? вообще я думаю статью написать на эту тему
-
Всё интересует. Готов подождать статью :)
-
проект был такой - система счетчиков на подобии google analytics.
архитектура такая:
на сайты вставляется javascript код, который собирает необходимую информацию и посылает с ней запрос к нашему серверу. там стоит nginx а за ним куча tornado, которые скидывают все данные в mq. оттуда их забирают обработчики статистики, которые обрабатывают данные так, что mongo у нас получаются уже готовые отчеты по дням, месяцам и т.п.
django, как я уже писал, при создании пользователя/добавлении сайта создает соотв. коллекции в mongo. у модели "сайт" есть методы которые выбирают из mongo статистику, которая уже в готовом виде лежит
графики всякие строятся javascript`ом на стороне пользователя. -
ну статья будет скорее на тему как заставить django обрабатывать тысячи запросов в секунду;) про mongo это там будет один из пунктов
-
Сам думал примерно также, в результате очередной проект делаю на MongoDB + Mongokit + Bottle + WTForms, но уже во время разработки натыкался на необходимость реализации привычных в джанго вещей. Однозначно использовать джанго имеет смысл. Мне помимо админки недоставало таких фич:
- Интернационализация
- Формы (кстати, стандартные сообщения об ошибках типа "Обязательное поле" и ограничения по длине строки в джанго уже переведены на русский, а вот в WTForms надо при вызове вручную писать)
- Сообщения на почту (500 ошибка)
- Кастомные команды (management), удобная вещь
- Паджинация
- Настройки (можно конечно написать велосипед, но в джанго встроенного функционала мне бы хватило)
- Ну и нельзя забывать про уже написанные приложения - тот же sorl.thumbnail вручную придется реализовывать.
- Сигналы (они же работают не только с РСУБД!?)
Ну и еще кое-что, сейчас не упомню.
Сессии и модель пользователей написал свои, взяв за основу mango и исходники джанго.
Реквестирую статью про монго=)
-
denger, можно и про bottle статью реквистировать. Тоже прикольная штучка :)
-
из особенностей — обязательно нужно использовать репликацию, databaserepair, при больших объемах данных может длиться довольно долго. от кривых map-reduce запросов сервер падает(к счастью, падает в 100% случаев)
-
@Михаил Коробов
Да, тоже подумал об этом (держать и sql и mongo), но как-то не нашел решительных аргументов чтобы держать и то и другое сразу. Насчет написания своих велосипедов вы конечно правы, вопрос стоял в их количествах.
@denger
Спасибо, что поделились своим опытом. MongoKit сильно помог?
В общем, интерес к mongo и scheme-free базам у народа налицо, +=1 к реквесту статьи. -
MongoKit не сильно помог. Он скажем так, больше для документации (описание структуры) и создания методов у объектов. Например у меня возможные цвета объекта хранятся в списке, типа ['black', 'green'], а для вывода в шаблон в виде select есть
@property def printable_color(self):На другом сайте держу одновременно postgresql и mongodb (сложилось исторически, в начале был один постгрес), перешел бы полностью на монго, но я не пишу тесты и боюсь баги буду ещё долго править.
-
Исходил из того что "теряются" многие связанные с моделями фичи, вроде авторизации/сессий и связанного с ними.
Сессии вроде не зависят от базы данных. т.е. сессии могут быть в постгресе, а пользователи - в монго. В любом случае можно и сессии и авторизацию вынести в монго, смотрите http://github.com/vpulim/mango
-
А mongoengine кто-нибудь пробовал? Доки ok там + пару туториалов есть. Есть ли какой-то выигрыш от использования чисто pymongo?
mango интересно, статью про mongo тоже реквестирую. -
кстати, погонял django-mongodb - производительность хуже, чем у mysql(да и с надежностью проблемы наверняка).
вообще всякие такие библиотеки типа mongoengine - странные. брать schema-less хранилище и приделывать к нему схему:)
ведь это преимущество-что можно разнородные очень данные хранить вместе. потом самые вкусные вещи типа map reduce теряются -
django-mongodb не смотрел, но осуждаю. В монго в каждой коллекции хранятся документы. И в пределах одной коллекции у них почти всегда одна и та же схема. Её можно держать в уме, можно написать в документации, а можно написать явно на питоне. При этом добавляются плюшки - валидация и работа с объектом. Во вьюхе я делаю запрос к базе, получаю объект/список объектов. В шаблоне вывожу некоторые поля объекта. Если это голый монго-словарь - то
{{ user.username }}, если завернутый в mongokit (а именно с ним я работал) - то так же. Если же нужно что-то вычисляемое, то для объекта -{{ user.get_absolute_url }}, а вот для словаря нужно что-то типа{% get_url_for_user user %}. Плюс у объекта есть метод save, ну и другие плюшки, плюс код лучше - всё, что касается взаимодействия с БД инкапсюлируется в объект. При этом никто не отнимает у тебя возможность прямого доступа через pymongo. -
Еще покопал mongoengine, denger все правильно говорит.
Задание базовой схемы в питоне оно не плохо, расширяешь при необходимости просто добавлением полей, а плюшек действительно много. И валидации, и менеджеры, и работа с объектами, и всякое другое.
Плюс там уже переписаны auth и session. -
> Плюс у объекта есть метод save
И как он работает? В mongodb очень крутые и быстрые апдейты, это одна из главных его фишек+всякие штуки типа $inc в апдейтах.
В коллекции не обязательно хранятся однородные данные. Мы потом можем выбрать, например, только те, у которых есть какой-нибудь атрибут -
Работает скорее всего так же, как и в pymongo, сохранение записи по _id, лично у меня почти всегда меняется несколько полей и надо просто сохранить. Хитрые апдейты делаются вручную, вряд ли надо это загонять в "ОРМ".
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.




