В течение некоторого времени я пытался применить на практике некоторые «крутые» вещи, которые я читал о noSQL (couchDB, mongoDB, Redis ...) за последние годы.
IЯ довольно привык писать приложения с Django и начал использовать Play!когда Java является единственно приемлемым вариантом развертывания (и наслаждаюсь им тоже).Оба имеют модули для работы, например, с MongoDB , а у django также есть nonrel .Но я никогда не чувствовал потребности в noSQL.
Пока я, наконец, не нашел то, что мне показалось хорошим вариантом использования для ориентированного на документы хранилища, такого как MongoDB.
Вариант использования
Допустим, нам нужно управлять порядком и отслеживать (что угодно) некоторые сложные предметы.Предметы могут иметь много разных свойств, например.упрощенно мы могли бы иметь:
- Холодильник, который может иметь
- одну или две двери,
- класса A, B или C,
- цвет поверхности
- автономный или встроенный
- Духовка, которая может иметь:
- газ или электричество или оба
- Самостоятельная очистка или нет
- автономная или встроенная
Решение SQL / ORM
Как видите, каждый объект может иметь несколькосвойства, которые могут быть ограничены по типу.
В моей обычной СУБД через ORM я бы определил модель «продукта», а затем унаследовал две модели: холодильник и духовку.Если через какое-то время холодильник получает еще одно свойство, я изменяю модель - и, соответственно, схему -, выполняю миграцию и добавляю столбец.
noSQL solutions
noSQL solutions IМожно подумать:
- с использованием RDF (с чем-то вроде Virtuoso или построением собственного упрощенного хранилища троек)
- с использованием ориентированной на документы базы данных, такой как MongoDB
Проблема
Но Мне не удается понять, как отличается (проще) разработка прагматично будет переход на решение NoSQL, все еще использующеефреймворк ORM с правильным адаптером (особенно с DODB).
Допустим, я использую Django с MongoDB через mongodb-engine.
Я все еще использую тот же ORM, поэтому япо-прежнему описывать эти объекты как модели, перечисляя все свойства.Таким образом, ORM выполняет точно такую же работу!Затраты на создание миграции в случае изменения модели очень ограничены с помощью ORM (в частности, с чем-то вроде South), при этом нет ничего, что требовало бы изучения новой технологии само по себе.
Там могут быть / другие / преимуществаDODB и некоторые специфические для MongoDB (масштабируемость, обработка данных, возможно, производительность), но ... как насчет точного случая использования и проблемы, которую я описываю?
Скорее всего, я упускаю точку, поэтому здесьпришли реальные вопросы:
Для этого конкретного случая использования:
- Является ли этот пример хорошим или плохим для DODB (у вас есть хороший)?
- имеет ли смысл объединять ORM для базовых вещей (пользователи, заказы) и использование noSQL без ORM для сложных объектов, есть ли веская причина для полного перехода на noSQL или мне следуетоставайтесь со стандартным ORM / SQL?
Я понимаю, что ответы на эти вопросы могут быть частично субъективными, так что вы можете предполагать совершенное знание теории noSQL и SQL, а такжеОК ОРМ;наличие хороших мостов от стандартных ORM до БД noSQL.Давайте предположим, что мы говорим об этом сценарии использования с MongoDB в качестве альтернативы noSQL.
Но есть более общий вопрос - который является основным вопросом этого поста SO:
- Разве хороший ORM (такой как JPA, ActiveRecord или Django) не делает noSQL и, в частности, ориентированные на документы базы данных малопригодными?
- ... и стоит ли использовать noSQL с«классический» ORM?
(«мало пользы» с точки зрения программирования и обслуживания, производительность и аналогичные критерии - это другой вопрос, и для него требуется точное сравнение между продуктами)
[править]
Я также пытаюсь понять, не лучше ли отказаться от использования ORM при переходе на noSQL.Было бы неплохо иметь больше «динамических» моделей, например.У меня могла бы быть таблица, описывающая, что представляют собой модели Fridge и Oven (поля), и модели Fridge и Oven в коде могли бы конструировать свои представления динамически (формы для редактирования и списки для отображения).
Смежные вопросы:
[править] : это здесь, чтобы показать мое исследование, а также уточнить, что то, что я спрашиваю, не является общим для noSQL против SQL
РЕДАКТИРОВАТЬ И ссылки:
- Siena : постоянный API для Java, созданный на основе хранилища данных Python для Google App Engine, пытающегося установить мост между мирами SQL и NoSQL.
- minimongo : легкий, без схемы, Pythonic Object-Oriented интерфейс для MongoDB