Можете ли вы действительно увеличить масштаб с Django ... учитывая, что вы можете использовать только одну базу данных? (В файлах models.py и settings.py)

Django позволяет использовать только одну базу данных в settings.py. Это мешает вам расширяться? (миллионы пользователей)

5 голосов | спросил TIMEX 24 Jpm1000000pmSun, 24 Jan 2010 15:46:44 +030010 2010, 15:46:44

6 ответов


0
ответил code-zoop 24 Jpm1000000pmSun, 24 Jan 2010 15:49:51 +030010 2010, 15:49:51
0

База данных - не ваше узкое место.

Внимательно проверьте ваш браузер.

Для каждой страницы HTML вы отправляете (в среднем) 8 других файлов, некоторые из которых могут быть довольно большими. Это ваш JS, CSS, графика и т. Д.

Фактическим узким местом производительности является браузер, запрашивающий эти файлы и принимающий байты s ... l ... o ... w ... l ... y ...

Для масштабирования сделайте это.

  1. Используйте несколько внешних интерфейсов, сбалансированных с помощью чистого программного решения, такого как wackamole. http://www.backhand.org/wackamole/

  2. Используйте прокси-серверы, такие как squid, для отправки "других" файлов. Они в основном статичны. Именно здесь 7/8-ая часть работы загружается клиенту. Не усердствуйте в получении этих прав.

  3. Используйте несколько одновременных mod_wsgi /Django для создания - редкого - фрагмента динамического HTML на основе запросов к БД. Убедитесь, что mod_wsgi находится в режиме демона, чтобы вы могли иметь несколько серверов Django, доступных для Apache. Постройте столько, сколько вам нужно. Все они идентичны, все параллельно, и все разделены с Вакамоле.

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

Вы обнаружите, что это хорошо масштабируется. Вы обнаружите, что нагрузка хорошо распределяется между squid, apache, демонами Django и реальной базой данных. Вы также обнаружите, что каждая часть нагрузки (от скучных статических частей до интересного запроса к базе данных) происходит отдельно и одновременно.

Наконец, купите книгу Шлосснагла. http://www.amazon.com/Scalable-Internet-Architectures-Theo-Schlossnagle/dp /067232699X

ответил S.Lott 24 Jpm1000000pmSun, 24 Jan 2010 16:08:22 +030010 2010, 16:08:22
0

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

Масштабирование записи действительно может быть проблемой базы данных. «Раздробление» и наличие нескольких баз данных могут быть одним из решений, но с SQL это сложно, но при этом сохраняется связь между базами данных. Популярными решениями становятся новые типы баз данных «nosql». Но если у вас действительно есть эти проблемы, то вам нужна серьезная помощь специалиста, а не просто ответы от парней из Stackoverflow. :)

ответил Lennart Regebro 24 Jpm1000000pmSun, 24 Jan 2010 16:12:50 +030010 2010, 16:12:50
0

Уже есть несколько отличных ответов (например, С. Лотт), однако я подумал, что мне следует добавить еще кое-что:

Не используйте базу данных для логических операций

Я понимаю привлекательность Order By или SQL Procedures однако у вас есть только одна база данных, но у вас есть несколько серверов django, пусть серверы справятся с этим, если вы можете.

Конечно, если вы хотите, чтобы только последние десять строк соответствовали определенному критерию (дате), то обязательно сделайте это точно в запросе;) Просто убедитесь, что вы не перегружаете базу данных операциями, которые могут быть обработаны в другом месте. .

Добавьте больше оборудования к проблеме

MySQL и Oracle достаточно хорошо масштабируются на оборудовании, если у вас есть небольшая проблема с производительностью, вы можете начать с добавления дополнительного оборудования.

Разделите вашу базу данных

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

Обдумайте настройку и следите за вашими запросами /индексом

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

Не выбирайте архитектуру ваших таблиц изолированно, а рассматривайте запросы

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

Просто пара мыслей:)

ответил Matthieu M. 24 Jpm1000000pmSun, 24 Jan 2010 16:27:08 +030010 2010, 16:27:08
0

Несколько разных советов:

  • Я удивлен, что никто еще не упомянул об этом. Используйте memcached. Если вы получаете много повторяющихся типов запросов (что делают большинство веб-приложений), это может иметь огромное значение.

  • Рассмотрите возможность использования Oracle аварийного переключения и балансировки нагрузки . Это позволяет добавить поддержку нескольких баз данных в одном подключении к базе данных.

  • Еще одна вещь, которую следует учитывать, - это использование системы, аналогичной системе FriendFeed . Это решает проблему «как мы вносим изменения в базу данных, не останавливая мир?» больше всего на свете.

ответил Jason Baker 24 Jpm1000000pmSun, 24 Jan 2010 16:42:32 +030010 2010, 16:42:32
0

Если вы обнаружите, что БД является узким местом вашего приложения, и теперь они обходят его (например, используя кеширование), то вам следует также масштабировать БД. Джанго не имеет к этому никакого отношения

ответил GabiMe 24 Jpm1000000pmSun, 24 Jan 2010 16:12:19 +030010 2010, 16:12:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132