Драйвер MongoDB для поддержки большинства функциональных возможностей Django
Согласно требованиям проекта, я должен использовать Django + MongoDB
. Я супер новичок в Django (не разбираюсь и в ORM Django), но имею хороший опыт работы с MongoDB. Мой проект заключается в хранении большого количества данных без схем, а затем составлении аналитических отчетов или использовании для машинного обучения и т.д.
MongoDB заявляет PyMongo
как официальный драйвер для проектов Python, но существует множество других драйверов, таких как mongoengine
, djongo
, motor
и т.д.
Прочитав много статей, я все еще не могу найти простой ответ на свой вопрос:
- КАКОЙ ДРАЙВЕР ПОДДЕРЖИВАЕТ БОЛЬШУЮ ЧАСТЬ ФУНКЦИОНАЛЬНОСТИ DJANGO
О Джонго, В этой ссылке говорится, что:
потому что он поддерживает все библиотеки django contrib. Используя Djongo, все, что нам нужно сделать, это настроить и изменить базовый импорт моделей, не нужно беспокоиться об изменении сериализаторов, представлений и всех остальных модулей.
- Если я использую
PyMongo
, не упущу ли я какое-либо преимущество Django, кроме ORM?
Я открыт для предложений и критики, так как я только начал изучать это...
Согласно Даниэлю Рою Гринфельду
Давайте разберемся с одной вещью. Это не поношение MongoDB. MongoDB отлично работает со многими вещами (FastAPI, Flask, node и т.д.), но это несоответствие с Django.
Я говорю не от незнания. На самом деле, у меня довольно большой опыт объединения MongoDB и Django. Вы можете увидеть некоторые из моих ранних работ по объединению этих инструментов в несуществующем django-mongonaut.
Давайте разберемся в предыстории этого поста: На различных форумах помощи Django можно услышать запросы от начинающих Django-разработчиков о том, как использовать MongoDB с Django. Чаще всего они хотят заменить Django ORM на вызовы к MongoDB. Вот причины, которые я слышал до сих пор.
Причина 90%: JSON-хранилище
В большинстве случаев люди хотят заменить SQL на MongoDB в Django, причина в том, что они хотят хранить JSON данные и искать по ним.
Причина 5%:
Производительность
Часть людей хочет использовать MongoDB с Django из-за предполагаемых соображений производительности. Конечно, если вы запустите MongoDB без каких-либо гарантий записи и решите отказаться от транзакций с базой данных, она будет работать быстрее, чем любое реляционное хранилище. Однако это опасно небезопасный подход к делу. Он просто не стоит риска повреждения данных.
Не верьте мне на слово, потратьте час на поиск статей о безопасности записи в MongoDB. Не обращайте внимания на шумиху в статьях, опубликованных mongodb.com, почитайте, что говорят реальные предприятия и примеры проектов
Кроме того, если вы хотите ускорить ввод/вывод базы данных в Django, стандартная практика заключается в использовании асинхронных инструментов, таких как Celery, перед переключением хранилища данных.
Причина 4%:
Увеличение масштаба
Каждый, кто говорит вам, что реляционные базы данных не могут масштабироваться так же хорошо, как MongoDB (или что-либо еще), что-то вам продает. Или вам что-то продали, и вы не хотите признавать, что купились на эту шумиху.
Опять же, не верьте мне на слово, потратьте час на поиск статей о проблемах масштабирования с MongoDB. Опять же, не обращайте внимания на маркетинг и читайте реальные примеры из практики.
Причина 1%:
Менеджмент
Время от времени кто-то говорит мне, что использование MongoDB с Django - это решение руководства. В этом случае им следует отправить своего начальника(ов) к этой записи в блоге.
Руководство должно знать, что Django предназначен для использования с бэкендом реляционной базы данных (PostgreSQL, MySQL) и хранилищем ключей/значений для эфемерных данных (Redis, Memcached). Выход за рамки этой концепции приведет к замедлению разработки и разочарованию команды. Даже если ваша команда сможет обойти эту проблему, ей будет мешать невозможность в полной мере использовать инструменты экосистемы Django.
Если вы должны использовать MongoDB, используйте FastAPI или Flask вместо этого
В MongoDB нет ничего плохого. Однако она неоптимальна при использовании с Django. Если вы используете ее с правильными правами на запись, MongoDB не дает никаких преимуществ в скорости работы с Django. Вы также теряете многие преимущества Django (транзакции с базой данных, надежная безопасность, формы, простота использования REST-фреймворка Django, сотни пакетов сторонних разработчиков и т.д.). Вам придется переписать довольно много вещей.
И если вам придется переписать так много функциональности Django, чтобы использовать MongoDB, вы с тем же успехом можете использовать FastAPI или Flask. Честно говоря, это не плохой выбор, так как гибкость этих инструментов делает их идеальными для использования с нереляционными базами данных.
Я знаю, потому что именно так я ранее использовал и FastAPI, и Flask, то есть не с реляционными данными. Я построил десятки микросервисов, которые полагаются на DynamoDB. Хотя DynamoDB - это не MongoDB, они достаточно похожи, чтобы я мог сказать, что этот подход восхитителен.