Какой механизм базы данных выбрать для приложения Django?
Я новичок в Django и только использовал sqlite3 в качестве механизма базы данных в Django. Теперь одно из приложений, над которыми я работаю, становится довольно большим, как с точки зрения сложности моделей, так и запросов/вторых.
Как поддерживаются Django двигатели баз данных с точки зрения производительности? Какие-нибудь подводные камни в использовании любого из них? И последнее, но не менее важное: насколько легко переключиться на другой движок, как только вы его используете какое-то время? Спасибо!
Ответы
Ответ 1
Если вы собираетесь использовать реляционную базу данных, наиболее популярным в сообществе Django является PostgreSQL. Это мой личный фаворит. Но, похоже, MongoDB становится довольно популярным в сообществе Python/Django (хотя я никогда с ним не работал). В MySQL также много успешных проектов. Но я лично предпочитаю PostgreSQL 9.0 или 9.1. Надеюсь, это поможет.
EDIT: Я не занимался этой работой. Просто хочу добавить еще несколько соображений.
Для подавляющего большинства веб-сайтов MySQL или PostgreSQL будут работать нормально. У обоих есть свои сильные и слабые стороны. Я предлагаю вам google "MySQL против PostgreSQL". В этом поиске много хитов (на момент написания этого я получил более 3 000 000). Вот несколько советов при проведении оценки.
- Отдайте предпочтение более поздним статьям. Попробуйте убедиться, что вы сравниваете MySQL 5.5 с PostgreSQL 9.0 или 9.1.
- MySQL позволяет вам выбирать механизм хранения. ИМО, закрытие сравнения Apple с Яблоком - это InnoDB для Postgres.
- Имейте в виду, что вам не нужны все функции InnoDB или Postgres. Вы также должны посмотреть на некоторые из других механизмов хранения.
Кроме того, если вы планируете использовать какие-либо триггеры в своей системе, есть пара действительно неприятных ошибок с MySQL и InnoDB, связанных с ними и соответствия ACID. Здесь первый и здесь другой. Возможно, вам не нужна эта функциональность, просто имейте это в виду.
Последнее, что может повлиять на вас, это то, что с PostgreSQL вы можете писать функции db с помощью Python. Ниже приведена ссылка на документы.
Ответ 2
MySQL и Postgres являются двумя наиболее распространенными базами данных БД, используемыми в сообществе Django, и имеют сопоставимую производительность. Я согласен с тем, что Postgres более популярен в сообществе Django, хотя у меня нет жестких чисел, чтобы поддержать это. Я, конечно, не хочу выбирать MySQL, но я бы сказал, что есть некоторые распространенные ошибки при использовании MySQL с Django (или MySQL вообще):
- Нет поддержки транзакций с MyISAM (больше не используется по умолчанию в 5.5.5)
- Нет поддержки в миллисекундах для datetime
- Поддержка часовых поясов для datetime
- Уникальные поля символов должны быть меньше 255 символов
- Значение по умолчанию не зависит от регистра.
Есть несколько документов о различных функциях Django, которые не поддерживаются на разных бэкэндах БД: https://docs.djangoproject.com/en/1.3/ref/databases/.
Ответ 3
MySQL и PostgreSQL лучше всего работают с Django. Я бы очень хотел, чтобы вы выбрали тот, который вы изменили настройки своего развития, чтобы использовать его во время разработки (против использования sqlite3 в режиме dev и "реальной" базы данных в prod), поскольку существуют тонкие поведенческие различия, которые могут вызвать множество головных болей в будущее.
Ответ 4
Я не уверен, какой DB использовать, но если кто-то планирует использовать MongoDB, тогда имейте в виду, что он работает только для py2, а не для py3.
Ссылки:
Настройка проекта с помощью Django 1.10, mongodb и Python 3.4.3
Ошибка при настройке MongoDB с помощью django с использованием движка django mongodb в окнах
Настройка MongoDB + Django