Преобразование проекта Django из MySQL в Mongo, какие -либо серьезные ловушки?

StackOverflow https://stackoverflow.com/questions/4718580

Вопрос

Я хочу попробовать MongoDB с монгонгином. Я новичок в Django и базах данных, и я вписываюсь с иностранными ключами, соединениями, круговым импортом (вы называете это). Я знаю, что смогу в конечном итоге решить эти проблемы, но Монго просто кажется более простым решением того, что я делаю. У меня вопрос, я использую множество приложений с подключением (ImageKit, Hay Stack, Registration и т. Д.) И хотел знать, будут ли эти приложения продолжать работать, если я сделаю переключатель. Есть ли какие -нибудь известные головные боли, с которыми я столкнусь, если так, я мог бы просто продолжать стучать головой с MySQL.

Это было полезно?

Решение

Нет никаких причин, по которым вы не можете использовать один из стандартных RDBMS для всех стандартных приложений Django, а затем Mongo для вашего приложения. Вам просто нужно заменить все стандартные способы обработки вещей из Django Orm, выполняя это по монго.

Таким образом, вы можете сохранить urls.py и его аккуратное соответствие шаблонов, представления по -прежнему будут получать параметры, а шаблоны все равно могут принимать объекты.

Вы потеряете запросы, потому что я подозреваю, что они слишком тесно связаны с моделями RDBMS, но они просто лениво оцениваются списки. Просто игнорируйте документы Django по написанию моделей.

О, и у вас не будет интерфейса администратора Django для легкого доступа к вашим данным.

Другие советы

Вы можете захотеть проверить Джанго-Нонрель, которая является молодой, но многообещающей попыткой получить бэкэнд NOSQL для Джанго. Документация не хватает в данный момент, но она отлично работает, если вы просто разрабатываете это.

Я использовал Mongoengine с Django, но вам нужно создать, например, файл, такой как mongo_models.py. В этом файле вы определяете свои документы Mongo. Затем вы создаете формы, чтобы соответствовать каждому документу Mongo. Каждая форма имеет метод сохранения, который вставляет или обновляет то, что хранится в Mongo. Формы Django предназначены для подключения к любому заднему концу данных (с небольшим количеством ремесленных)

Остерегайтесь: если у вас есть очень четко определенные и структурированные данные, которые можно описать в документах или моделях, не используйте Mongo. Он не предназначен для этого, и что -то вроде PostgreSQL будет работать намного лучше.

  • Я использую PostgreSQL для реляционных или хорошо структурированных данных, потому что это хорошо для этого. Небольшой след и хороший ответ.
  • Я использую Redis для кэша или работы в очереди/списках памяти, потому что это очень хорошо для этого. Отличная производительность, при условии, что у вас есть память, чтобы справиться с этим.
  • Я использую Mongo для хранения больших документов JSON, для выполнения карты и уменьшения их (при необходимости), потому что это очень хорошо для этого. Обязательно используйте индексацию на определенных столбцах, если вы можете ускорить поиск.

Не кружите, чтобы заполнить квадратное отверстие. Это не заполнит его.

Я видел слишком много постов, где кто -то хотел поменять реляционный DB на Mongo, потому что Mongo - это модное слово. Не поймите меня неправильно, Монго действительно великолепен ... когда вы используете его соответствующим образом. Я люблю использовать монго соответствующим образом

Апресс, он не будет работать для любого существующего приложения Django, которое отправляет свои модели. Там нет бэкэнда для хранения модельных данных Джанго в MongoDB или других Storages noSQL в данный момент И, кроме базы данных, сами модели являются чем -то вроде спорного вопроса, потому что, как только вы приходите к использованию приложения для чьего -то приложения (django.contrib Приложения включены), которые отправляют триады модели-обратного вида, всякий раз, когда вам требуется немного другая модель для ваших целей, вам либо нужно редактировать код приложения (просто неправильно), динамически редактировать содержимое импортированных модулей Python во время выполнения (волшебное), вилка Источник приложения вообще (громоздкий) или предоставил дополнительные настройки (хорошие, но это редкая встреча, с django.contrib.auth Вероятно, является единственным широко известным примером приложения, которое позволяет динамически указать, какую модель она будет использовать, как в случае с моделями профиля пользователя через AUTH_PROFILE_MODULE параметр).

Это может звучать плохо, но на самом деле это означает, что вам придется развернуть базы данных SQL и NOSQL параллельно и перейти от базис приложений к приложению-как предложенный расцена Определенное приложение, черт возьми, просто наверните собственное приложение.

Есть много прекрасных джангонавтов с носкими, которые думают о нозкле. Если вы следили за потоками из прошлых презентаций Djangocon, каждый год проводились важные дискуссии о том, как Джанго должен использовать Storaves NoSQL. Я почти уверен, что в этом году или в следующем, кто -то будет рефакторировать приложения и модели API, чтобы проложить путь к чистому дизайну, который, наконец, может объединить все различные ароматы стеклеров NOSQL в рамках ядра Django.

Я недавно попробовал это (хотя без монгонгина). Есть огромное количество ловушек, ИМХО:

  • Нет интерфейса администратора.
  • Никакой auth django.contrib.auth не полагается на интерфейс DB.
  • Многие вещи полагаются на django.contrib.auth.user. Например, класс запроса. Это огромное препятствие.
  • Без регистрации (полагается на интерфейс DB и django.contrib.auth)

По сути, поиск через интерфейс Django для ссылок на django.contrib.auth, и вы увидите, сколько вещей будет сломано.

Тем не менее, возможно, что Mongoengine оказывает некоторую поддержку, чтобы заменить/увеличить django.contrib.auth на что -то лучшее, но есть так много вещей, которые зависят от этого, что трудно сказать, как вы так много общаетесь.

Основная ловушка (для меня): нет соединений!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top