Выполнение Django с FastCGI или с mod_python

Если предположить, что отношения являются односторонними, от U1 до U2, то все просто:

select u.*
from relationships r
inner join users u on r.u2_fk = u.id
where r.u1_fk = ?

Я понятия не имею, что означает действие или статус.

Что-то, что сделало бы это более понятным, это если вы сделаете свое поле дБ более описательным в таблице отношений: то есть user_id и friend_id. Тогда становится очевидным, что вы хотите присоединить файл Relations.friend_id к user.id и отфильтровать по параметру Relations.user_id

Затем вы можете дополнительно выполнить фильтрацию по статусу и т. Д. добавив желаемые результаты, я вижу, что вы хотите включить в результаты как u1_fk, так и u2_fk. Это, конечно, можно сделать, но вы делаете это гораздо более запутанным, ИМО.

Я бы предложил, чтобы, когда дружба была принята, создала новую линию для нового друга. Таким образом, когда вы хотите найти всех друзей для пользователя, вам нужно только сопоставить u1_fk (то есть, user_id), а другом всегда будет u2_fk (friend_id).

Затем каждый друг может независимо контролировать, как они хотят общаться, т.е. вы можете заблокировать меня или я могу заблокировать вас. - мои два цента стоят. Заставьте свою ассоциацию делать одно.


Может быть полезно взглянуть на схему:

User    Relationship    User
           id
id ---->  u1_fk
          u2_fk <------- id

Это было бы легко понять. Но то, что вы хотите из этого, больше похоже на

User    Relationship    User
           id
 id -----> u1_fk <------ id
     \---> u2_fk <---/

Итак, для начала, я смотрю на это с точки зрения фильтрации по отношениям, а затем добавляю информацию о пользователях по мере их соответствия:

select r.id, r.u1_fk, r.u2_fk, 
       coalesce(u1.user_id, u2.user_id) userid,
       coalesce(u1.username, u2.username) username,
       coalesce(u1.user_picture, u2.user_picture) picture
from relationship r
left join user u1 on r.u1_fk = u1.id
left join user u2 on r.u1_fk = u2.id
where u1_fk = ? or u2_fk = ?

но это означает, что вам придется объединять поля из u1 и u2.

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

Однако, что происходит если у вас есть:

id    u1_fk    u2_fk
        1        2
        2        1

Я думаю, что оба решения дадут вам дублирующий список.

Вот почему я настоятельно рекомендую вам переименовать (по крайней мере, в вашей голове) u1_fk и u2_fk в user_id и friend_id.

20
задан Dana the Sane 29 October 2008 в 04:44
поделиться

7 ответов

Я сделал обоих, и Apache/mod_python имел тенденцию быть легче работать с и более стабильный. Но в эти дни я перепрыгнул к Apache/mod_wsgi, который является всем, что я когда-либо хотел и больше:

  • Легкое управление процессами демона.
  • В результате очень лучшая изоляция процесса (выполняющий несколько сайтов в той же конфигурации Apache с mod_python почти всегда заканчивается в проблеме - переменные среды и утечка расширений C через сайты, когда Вы делаете это).
  • Легкие перезагрузки кода (устанавливает его, право и Вы может просто затронуть .wsgi файл для перезагрузки вместо того, чтобы перезапустить Apache).
  • более предсказуемое использование ресурсов. С mod_python данное использование памяти дочернего процесса Apache может перейти вокруг много. С mod_wsgi это довольно стабильно: после того как все загружается, Вы знаете, что это - то, сколько памяти это будет использовать.
21
ответ дан 29 November 2019 в 23:53
поделиться

Nginx с mod_wsgi

5
ответ дан 29 November 2019 в 23:53
поделиться

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

mod_python и апач дадут Вам немного больше гибкости, мудрой функцией, если Вы захотите написать код за пределами django, который действительно наполняет как автор обзора или любое необычное получение/установка HTTP-заголовка. Возможно, Вы хотите использовать другие встроенные функции апача, такие как mod_rewrite.

, Если память является беспокойством, избегая, форма apache/mod_python поможет много. Apache имеет тенденцию использовать много RAM, и код mod_python, который склеивает во всю апачскую функциональность, занимает большое пространство памяти также. Не говоря уже о природе мультипроцесса апача имеет тенденцию съедать больше RAM, когда каждый процесс растет до размера, он - самый интенсивный запрос.

6
ответ дан 29 November 2019 в 23:53
поделиться

Я использую его с nginx., не уверенным, если это действительно быстрее, но конечно меньше RAM/загрузки ЦП. Также легче работать, несколько процессов Django и иметь nginx отображают каждый префикс URL на различный сокет. все еще в полной мере пользование memcached модулем nginx, но сначала тестирует шоу огромный преимущество скорости.

2
ответ дан 29 November 2019 в 23:53
поделиться

Существует также mod_wsgi, это, кажется, быстрее, чем mod_python и режим демона работают подобный FastCGI

2
ответ дан 29 November 2019 в 23:53
поделиться

Лично у меня был он работающий с FastCGI в течение некоторого времени теперь (приблизительно 6 месяцев), и время отклика 'кажется' более быстрым при загрузке страницы тот путь по сравнению с модификацией ___ Python. Критическая причина для меня, хотя то, что я не мог видеть очевидный способ сделать несколько сайтов от тех же апачей / mod_python установка, тогда как FastCGI был относительной легкой задачей.

я не провел особенно полных экспериментов, хотя :-)

[Редактирование] Разговор на основе опыта, хотя, создавая FastCGI может быть что-то вроде, причиняет боль в первый раз вокруг. Я продолжаю означать писать руководству..!

2
ответ дан 29 November 2019 в 23:53
поделиться

Я рекомендовал бы конфигурации WSGI; я продолжаю означать угробить апача, но всегда существует некоторое приложение прежней версии на сервере, который, кажется, требует его. Кроме того, экология приложения WSGI очень разнообразна, и она позволяет аккуратные приемы, такие как объединение в гирляндную цепь WSGI "промежуточное программное обеспечение" между сервером и приложением.

Однако в настоящее время существуют известные проблемы с некоторыми приложениями и апачским mod_wsgi, особенно некоторые ctypes приложения, так быть осторожным, при попытке работать, скажем, geodjango, который использует ctypes экстенсивно. Я в настоящее время работаю вокруг тех проблем путем возвращения к fastcgi сам.

2
ответ дан 29 November 2019 в 23:53
поделиться
Другие вопросы по тегам:

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