Что мне нужно знать о базах данных, чтобы создать качественное приложение Django? - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь оптимизировать свой сайт и нашел этот симпатичный маленький документ Django: Оптимизация доступа к базе данных , который предлагает профилирование с последующим индексированием и выбором правильных полей в качестве отправной точки для оптимизации базы данных.1003 *

Обычно, документы django объясняют вещи довольно хорошо, даже вещи, которые более опытные программисты могут посчитать «очевидными».Не так в этом случае.После отсутствия объяснения индексации, документ продолжает:

Мы будем считать, что вы сделали очевидные вещи выше.

Уххх.Подождите!Что, черт возьми, индексирует?

Очевидно, я могу выяснить, что такое индексация через Google, мой вопрос: что мне нужно знать, что касается базы данных, чтобы создать масштабируемый веб-сайт?Что я должен знать о структуре Django?Какие еще "очевидные" вещи я должен знать?Где я могу их узнать?

Я ищу указывать направление.Мне не нужно ничего изучать и все о SQL, я просто хочу быть достаточно информированным, чтобы правильно построить свое приложение.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Я призываю вас прочитать все, что предлагают другие ответы, и все, что вы можете найти по этому вопросу, потому что это хорошая информация, которая поможет вам стать лучше.

Тем не менее, одна из приятных особенностей Django и других подобных фреймворков заключается в том, что по большей части вам не нужно знать, что происходит за кулисами в БД. Django автоматически добавляет индексы для полей, которые в них нуждаются. Поощрение добавлять больше зависит от вариантов использования вашего приложения. Если вы постоянно запрашиваете на основе одного конкретного поля, вы должны убедиться, что это поле проиндексировано. Это может быть уже (если это внешний ключ, первичный ключ и т. Д.), Но другие случайные поля обычно не являются.

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

1 голос
/ 11 января 2012

Википедия имеет хорошую статью об индексах базы данных, они похожи (ish) на индекс в книге, т. Е. Позволяют вам (компьютеру) находить вещи быстрее, потому что вы просто смотрите на индекс (вероятно, очень плохой пример: -)

Что касается производительности, есть много вещей, которые вы можете сделать, и предположительно, поскольку это очень подробный предмет сам по себе и является чем-то особенным для каждой СУБД, тогда для них (django) было бы отвлекать / не иметь значения подробно. Лучше всего на самом деле Google советы по производительности для вашей конкретной СУБД. Есть несколько общих советов, таких как индексация, ограничение запросов для возврата только необходимых данных и т. Д.

Я думаю, что одна из главных вещей - это хороший дизайн, максимально приближенный к Нормальной форме и вообще фактически учитывающий вашу базу данных перед программированием ваших моделей и т. Д. делать). Соглашения об именах также являются большим плюсом, лучше помнить явное, чем неявное: -)

Подведем итог:

  • Изучение / понимание основ, таких как реляционная модель
  • Выберите соглашение о присвоении имен
  • Создайте базу данных, используя инструмент ERM
  • Предпочитаю суррогатные идентификаторы
  • Используйте правильный тип данных минимально возможного размера
  • Используйте индексы надлежащим образом и не превышайте индекс
  • Избегайте ненужных / чрезмерных запросов
  • Приоритет безопасности и стабильности перед необработанной производительностью
  • После того, как вы настроили и запустили базу данных, «настройте» параметры анализа / профилирования базы данных, запросы, дизайн и т. Д.
  • Регулярное резервное копирование и архивирование - cron
  • Тусоваться здесь : -)
  • При необходимости переходить к репликации (ведущий / ведомый - django тоже очень хорошо это поддерживает)
  • Рассмотрите возможность обновления вашего оборудования
  • Не слишком зацикливайтесь на этом
1 голос
/ 11 января 2012

Проектирование базы данных Википедии и нормализация базы данных http://en.wikipedia.org/wiki/Database_design, и http://en.wikipedia.org/wiki/Database_normalization являются двумя очень важными понятиями в дополнение к индексации.

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

Обучение резервному копированию ваших данных также очень важно.

Список продолжает увеличиваться, следует также помнить о связях с БД, которые django обрабатывает для вас, OneToOne, ManyToMany, ManyToOne. https://docs.djangoproject.com/en/dev/topics/db/models/

Не следует игнорировать влияние JOIN на производительность. Доступ к свойствам модели в django настолько прост, но необходимо учитывать и то, что некоторые отношения внешнего ключа могут иметь огромное влияние на производительность.

Как только вы поймете эти вещи, у вас будет неплохая отправная точка для создания нетривиального приложения для django!

...