1. Артур

    11.03.2010

    1 ↑
    2 ↓
    Приветствую!
    Как вы считаете есть смысл использовать Django с noSQL, с MongoDB в частности?
    Т.к. без ORM от Django мало что остается, может лучше предпочесть другие пайтоновские фреймворки? Просто не работал с другими, не могу судить.
    С уважением,
  2. Иван Сагалаев

    11.03.2010

    0 ↑
    0 ↓

    Как вы считаете есть смысл использовать Django с noSQL, с MongoDB в частности?

    Да, вполне. Просто потому что Django сама по себе мало что меняет в этом выборе. Выбор хранилища стоит основывать на том, какие у вас данные.

    Т.к. без ORM от Django мало что остается

    А это совсем заблуждение... ORM сильно желателен, только если вам хочется джанговскую админку использовать.

  3. pawnhearts

    11.03.2010

    0 ↑
    0 ↓
    есть бэкэнд django-mongodb - можно использовать с джанговской orm.
    но вообще я использовал просто pymongo
  4. Артур

    11.03.2010

    0 ↑
    0 ↓
    Исходил из того что "теряются" многие связанные с моделями фичи, вроде авторизации/сессий и связанного с ними.
  5. Артур

    11.03.2010

    0 ↑
    0 ↓
    есть бэкэнд django-mongodb - можно использовать с джанговской orm.
    но вообще я использовал просто pymongo
    pymongo хорош сам по себе, смысла во всех этих костылях сам не вижу.
  6. Выбор хранилища стоит основывать на том, какие у вас данные.

    именно. Если часть данных хорошо лежит в РСУБД (те же пользователи), то и храните их в РСУБД. Ничто не мешает совмещать ту же монгу с sql-решениями. И хранить данные там, где им лучше, а не все в монге/коуче (т.к. круче) и не все в mysql (т.к. привычнее). Смотрите, какие у Вас данные, что с ними планируется делать, и принимайте решение.

    Насчет сомнений, конкретно: сессии на базу вообще не завязаны. Auth-бэкенд для авторизация без привязки к джанговскому ORM и SQL пишется за пару минут.

  7. pawnhearts

    11.03.2010

    0 ↑
    0 ↓
    Ну вот у меня как раз пользователи и ещё некоторые вещи хранились в рсубд, при этом висели сигналы, при создании пользователя для него заводилась коллекция в mongo. Также у моделей были методы, которые выбирали нужные данные через pymongo.
  8. igorekk

    11.03.2010

    0 ↑
    0 ↓
    pawnhearts, исходники где-нибудь можно посмотреть? у меня сейчас как раз подобные задачи стоят. вдруг увижу умные мысли :)
  9. pawnhearts

    11.03.2010

    0 ↑
    0 ↓
    igorekk что именно интересует? вообще я думаю статью написать на эту тему
  10. igorekk

    11.03.2010

    0 ↑
    0 ↓
    Всё интересует. Готов подождать статью :)
  11. pawnhearts

    11.03.2010

    1 ↑
    0 ↓
    проект был такой - система счетчиков на подобии google analytics.
    архитектура такая:
    на сайты вставляется javascript код, который собирает необходимую информацию и посылает с ней запрос к нашему серверу. там стоит nginx а за ним куча tornado, которые скидывают все данные в mq. оттуда их забирают обработчики статистики, которые обрабатывают данные так, что mongo у нас получаются уже готовые отчеты по дням, месяцам и т.п.
    django, как я уже писал, при создании пользователя/добавлении сайта создает соотв. коллекции в mongo. у модели "сайт" есть методы которые выбирают из mongo статистику, которая уже в готовом виде лежит
    графики всякие строятся javascript`ом на стороне пользователя.
  12. pawnhearts

    11.03.2010

    1 ↑
    0 ↓
    ну статья будет скорее на тему как заставить django обрабатывать тысячи запросов в секунду;) про mongo это там будет один из пунктов
  13. denger

    11.03.2010

    2 ↑
    0 ↓

    Сам думал примерно также, в результате очередной проект делаю на MongoDB + Mongokit + Bottle + WTForms, но уже во время разработки натыкался на необходимость реализации привычных в джанго вещей. Однозначно использовать джанго имеет смысл. Мне помимо админки недоставало таких фич:

    • Интернационализация
    • Формы (кстати, стандартные сообщения об ошибках типа "Обязательное поле" и ограничения по длине строки в джанго уже переведены на русский, а вот в WTForms надо при вызове вручную писать)
    • Сообщения на почту (500 ошибка)
    • Кастомные команды (management), удобная вещь
    • Паджинация
    • Настройки (можно конечно написать велосипед, но в джанго встроенного функционала мне бы хватило)
    • Ну и нельзя забывать про уже написанные приложения - тот же sorl.thumbnail вручную придется реализовывать.
    • Сигналы (они же работают не только с РСУБД!?)

    Ну и еще кое-что, сейчас не упомню.

    Сессии и модель пользователей написал свои, взяв за основу mango и исходники джанго.

    Реквестирую статью про монго=)

  14. igorekk

    11.03.2010

    0 ↑
    0 ↓
    denger, можно и про bottle статью реквистировать. Тоже прикольная штучка :)
  15. pawnhearts

    11.03.2010

    0 ↑
    0 ↓
    из особенностей — обязательно нужно использовать репликацию, databaserepair, при больших объемах данных может длиться довольно долго. от кривых map-reduce запросов сервер падает(к счастью, падает в 100% случаев)
  16. Артур

    12.03.2010

    0 ↑
    0 ↓
    @Михаил Коробов
    Да, тоже подумал об этом (держать и sql и mongo), но как-то не нашел решительных аргументов чтобы держать и то и другое сразу. Насчет написания своих велосипедов вы конечно правы, вопрос стоял в их количествах.

    @denger
    Спасибо, что поделились своим опытом. MongoKit сильно помог?

    В общем, интерес к mongo и scheme-free базам у народа налицо, +=1 к реквесту статьи.
  17. denger

    12.03.2010

    1 ↑
    0 ↓

    MongoKit не сильно помог. Он скажем так, больше для документации (описание структуры) и создания методов у объектов. Например у меня возможные цвета объекта хранятся в списке, типа ['black', 'green'], а для вывода в шаблон в виде select есть

    @property
    def printable_color(self):
    

    На другом сайте держу одновременно postgresql и mongodb (сложилось исторически, в начале был один постгрес), перешел бы полностью на монго, но я не пишу тесты и боюсь баги буду ещё долго править.

  18. denger

    12.03.2010

    0 ↑
    0 ↓

    Исходил из того что "теряются" многие связанные с моделями фичи, вроде авторизации/сессий и связанного с ними.

    Сессии вроде не зависят от базы данных. т.е. сессии могут быть в постгресе, а пользователи - в монго. В любом случае можно и сессии и авторизацию вынести в монго, смотрите http://github.com/vpulim/mango

  19. truetug.ya.ru

    12.03.2010

    0 ↑
    0 ↓
    А mongoengine кто-нибудь пробовал? Доки ok там + пару туториалов есть. Есть ли какой-то выигрыш от использования чисто pymongo?

    mango интересно, статью про mongo тоже реквестирую.
  20. pawnhearts

    13.03.2010

    0 ↑
    0 ↓
    кстати, погонял django-mongodb - производительность хуже, чем у mysql(да и с надежностью проблемы наверняка).
    вообще всякие такие библиотеки типа mongoengine - странные. брать schema-less хранилище и приделывать к нему схему:)
    ведь это преимущество-что можно разнородные очень данные хранить вместе. потом самые вкусные вещи типа map reduce теряются
  21. denger

    13.03.2010

    1 ↑
    0 ↓

    django-mongodb не смотрел, но осуждаю. В монго в каждой коллекции хранятся документы. И в пределах одной коллекции у них почти всегда одна и та же схема. Её можно держать в уме, можно написать в документации, а можно написать явно на питоне. При этом добавляются плюшки - валидация и работа с объектом. Во вьюхе я делаю запрос к базе, получаю объект/список объектов. В шаблоне вывожу некоторые поля объекта. Если это голый монго-словарь - то {{ user.username }}, если завернутый в mongokit (а именно с ним я работал) - то так же. Если же нужно что-то вычисляемое, то для объекта - {{ user.get_absolute_url }}, а вот для словаря нужно что-то типа {% get_url_for_user user %}. Плюс у объекта есть метод save, ну и другие плюшки, плюс код лучше - всё, что касается взаимодействия с БД инкапсюлируется в объект. При этом никто не отнимает у тебя возможность прямого доступа через pymongo.

  22. truetug.ya.ru

    13.03.2010

    0 ↑
    0 ↓
    Еще покопал mongoengine, denger все правильно говорит.

    Задание базовой схемы в питоне оно не плохо, расширяешь при необходимости просто добавлением полей, а плюшек действительно много. И валидации, и менеджеры, и работа с объектами, и всякое другое.

    Плюс там уже переписаны auth и session.
  23. pawnhearts

    14.03.2010

    0 ↑
    0 ↓
    > Плюс у объекта есть метод save
    И как он работает? В mongodb очень крутые и быстрые апдейты, это одна из главных его фишек+всякие штуки типа $inc в апдейтах.
    В коллекции не обязательно хранятся однородные данные. Мы потом можем выбрать, например, только те, у которых есть какой-нибудь атрибут
  24. denger

    14.03.2010

    0 ↑
    0 ↓

    Работает скорее всего так же, как и в pymongo, сохранение записи по _id, лично у меня почти всегда меняется несколько полей и надо просто сохранить. Хитрые апдейты делаются вручную, вряд ли надо это загонять в "ОРМ".

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.