前端處理
前端的靜態文件處理:買cdn
cdn
cdn:接收到的前端網頁靜態資源放到cdn上
前端緩存
控制圖片的緩存事件(HTTP響應中max-age)
精靈圖
后台處理
在后台:請求來了之后后台承受的並發量是有限的
解決辦法:
百度:累加服務器
集群化部署
集群化部署(Nginx、lvs)----->用緩存(Redis)/不從數據庫里拿數據,直接從緩存里面拿
用緩存
用緩存(Redis)---->如果緩存里面沒有然后進視圖函數里拿(涉及到同步異步的問題)
同步,異步
同步異步:同步的話一直鏈接着,特別耗費時間和資源,可以用celery框架處理
數據庫讀寫分離、分庫分表
然后到數據庫這一層----->涉及到讀寫分離,分庫分表
讀寫分離:
本質上就是多數據庫,比如兩個數據庫,一個用來讀取,一個用來寫
數據庫同步做好主從,一個指定用來讀,一個指定用來寫
邏輯:DATABASES字典的default里面配置兩個數據庫(default,db1),一個項目依賴兩個數據庫,鏈接到服務器,兩個數據庫好數據同步
手動方式來實現數據庫的讀寫分離:
settings.py
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.sqlite3', 'KAME':os.path.join(BASE_DIR, 'db.sqlite3'),
}, 'db1':{ 'ENGINE':'django.db.backends.sqlite3', 'KAME':os.path.join(BASE_DIR, 'db2.sqlite3'), } }
在urls.py
from django.conf.urls import uel
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^test1/',views.test),
url(r'^test2/',views.test2),
]
在views.py
from django.shortcuts import render,Httpserponse
from app01 import models
def test(request):
#默認寫數據,寫到default中
models.User.objects.using('db1').create(name='wxb',pwd='123')
return HttpResponse('新增成功')
def test2(request):
#using('default'),是queryset對象的方法
res = models.User.objects.all().using('defult')
print(res)
return HttpResponse('查詢成功')
在models.py里創建兩個表,然后把兩張表同步到數據庫中:
class User(models.Model): name = models.CharField(max_length = 32) pwd = models.CharField(max_length = 32)
然后做數據庫遷移(makemigrations),在執行migrate--database = db1可以指定把哪張表同步到哪個數據庫里
python manage.py makemigrations #在migrations文件夾下 生成記錄,遷移前檢查
python manage.py migrate #真正執行數據庫遷移命令,該命令執行之后創建表
在models里面
通過配置文件實現數據庫的讀寫分離,通過django官網提供的class Routerl
新建myrouter.py腳本,定義Router類:
class Router:
def db_for_read(self, model, **hints):
return default'
def db_for_write(self, model, **hints):
return 'db1'
然后配置Router
在settings.py中指定DATABASE_ROUTERS
DATABASE_ROUTER = ['myrouter.Router',]
數據庫做集群
同樣數據庫也可以做集群
用Redis或者MongoDB
mysql數據性能低,可以用Redis來存儲數據,以及MongoDB存儲
代碼邏輯優化
代碼邏輯的優化
SQL語句的優化
建索引
orm(default與only)