‘’
django 支撑什么类型的数据库
常见的关系数据库postgresql、mysql、oracle、sqlite这些都支持,官方优先推荐PostgreSQL关系数据库。
django 如何设置保存mysql数据库
配置project目录的 init.py
import pymysql
pymysql.install_as_MySQLdb
在setting.py文件中 修改:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'MEMBER', #数据库的名字 需要在sql中设置
'USER': 'root',
'PASSWORD': '123',
'CONN_MAX_AGE': 60, # 这是我加的配置,启动数据库连接池,默认是0,** 不开启 **
}
}
- 生成必要的数据表
python manage.py migrate
- 如何设置异步写入mysql
- 设置mysql最大连接数
大规模连接同时发给uwsgi,如128 * 8 = 1024 个线程同时处理请求,如果程序中有数据库连接操作
原来数据库的连接只有100个,这样会倒数数据库的连接池的连接扩展到1024个连接。没有连接池时,下次来请求时,要重新建立数据库连接;销毁和建立数据库连接的时间全都浪费了。这样做会不会节省数据库连接数? 多余的请求会被nginx拦住,返回502
show variables like "%timeout%";
show variables like '%max_connections%';
set global max_connections=5000
- uwsgi 配置说明
[uwsgi]
socket = 127.0.0.1:9000
# Django-related settings
# the django project directory (full path)
chdir = /data/www/game3s
# Django's wsgi file
module = wsgi
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 24
threads = 8
max-requests = 60000
# ... with appropriate permissions - may be needed
chmod-socket = 664
# clear environment on exit
vacuum = true
listen = 10000
# 后台运行,并输出日志
# daemonize = logs/uwsgi.log
# monitor uwsgi status 通过该端口可以监控 uwsgi 的负载情况
stats = 127.0.0.1:9191
# 收发数据缓存的大小,** 默认值是4K?**, 不设置上传大文件会报错
buffer-size = 32768
nginx配置
nginx在反向代理HTTP协议的时候,默认使用的是HTTP1.0去向后端服务器获取响应的内容后在返回给客户端。
HTTP1.0和HTTP1.1的一个不同之处就是,HTTP1.0不支持HTTP keep-alive。
nginx在后端服务器请求时使用了HTTP1.0同时使用HTTP Header的Connection:Close通知后端服务器主动关闭连接。
这样会导致任何一个客户端的请求都在后端服务器上产生了一个TIME-WAIT状态的连接。
所以我们需要在Nginx上启用HTTP1.1的向后端发送请求,同时支持Keep-alive。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
worker_rlimit_nofile 60000; # 这个是我加的配置,同时连接的数量 -- [受限于系统上可用的文件描述符的数量]
events {
worker_connections 65535; # default 2048
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120; # *** 请求返回后连接保持的时间 ***
# ****************************************************
# * 负载均衡改这里,默认轮询(无状态且短平快的服务)
# * least_conn 最少连接
# * ip_hash ip哈希
# * 加权 weight=3;
upstream http_backend {
server 127.0.0.1:9000;
server 192.168.1.231:9000;
keepalive 16;
}
server {
listen 80;
server_name localhost;
charset UTF-8;
access_log /data/www/game3s/logs/access.log;
error_log /data/www/game3s/logs/error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass http_backend; # *******
uwsgi_read_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
# jiangxf add end
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /data/www/game3s/static/;
}
location /static/ {
alias /data/www/game3s/static/;
index index.html index.htm;
}
location /media/ {
alias /data/www/game3s/media/;
}
}
types_hash_max_size 2048;
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_hide_header X-Powered-By;
fastcgi_hide_header X-Powered-By;
client_max_body_size 200m;
client_body_buffer_size 2560m;
proxy_temp_path /data/www/web_cache/cache_dir;
proxy_cache_path /data/www/web_cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=7d max_size=2g;
#ssl_session_cache shared:SSL:50m;
#ssl_session_timeout 5m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/javascript application/xml application/xml+rss;
include /etc/nginx/conf.d/*.conf;
}
参考:https://docs.djangoproject.com/en/1.11/ref/databases/
http://www.net-add.com/a/xitongyouhua/Pythonmoxing/2017/0424/43.html
https://www.cnblogs.com/wufengtinghai/p/5237165.html