django orm 讀寫分離,分庫分app

2022-05-04 13:03:10 字數 2257 閱讀 8312

1,讀寫分離

第一步:在settings下面配置

databases =,

'': }

第二步、資料庫遷移。 python manage.py migrate 預設使用default的資料配置,

完整的寫法為: python manage.py migrate --database default ,同樣的遷移完預設的資料庫後,

也要遷移從資料庫  python manage.py migrate --database db2

第三步、讀寫分離

第一種:用using()指定哪個資料庫的使用

#指定寫的資料庫

def write(request):

models.products.objects.

using('

default

').create(prod_name='

熊貓公仔

寫入成功')

# 指定讀的資料庫

方式二:自動讀寫分離

通過配置資料庫路由,來自動實現,這樣就不需要每次讀寫都手動指定資料庫了。

資料庫路由中提供了四個方法(db_for_read、db_for_write、allow_relation、allow_migrate)。

這裡主要用其中的兩個:def db_for_read()決定讀操作的資料庫,def db_for_write()決定寫操作的資料庫。

定義router類

新建myrouter.py(名字只要和後面的配置對應上就行),定義router類:

class router:  #名字可以隨便改

def db_for_read(self, model, **hints):

return 'db2'

def db_for_write(self, model, **hints):

return 'default'

配置router
settings.py中指定database_routers

database_routers = ['myrouter.router',]
可以指定多個資料庫路由,比如對於讀操作,django將會迴圈所有路由中的db_for_read()方法,直到其中乙個有返回值,然後使用這個資料庫進行當前操作。

一主多從方案

class

router:

def db_for_read(self, model, **hints):

"""讀取時隨機選擇乙個資料庫

"""import random

return random.choice(['

db2', '

db3', '

db4'

]) def db_for_write(self, model, **hints):

"""寫入時選擇主庫

"""return

'default

'

class

router:

def db_for_read(self, model, **hints):

':return

'db1''

:

return

'db2

'def db_for_write(self, model, **hints):

':return

'db1''

:

return

'db2

'

MyCat讀寫分離和分庫

學習主題 mycat 學習目標 1 掌握mycat的配置規則 2 掌握mycat配置讀寫分離 3 掌握mycat分片分庫 1 的作用是什麼?配置分片規則 2 中name屬性的作用是什麼?屬性指定唯一的名字,用於標識不同的分片規則。內嵌的rule標籤則指定對物理表中的哪一列進行拆分和使用什麼分片演算法...

分庫分表與讀寫分離

隨著業務的發展,使用者數量與資料數量不斷增加,迫使進行分庫分表。所謂分表就是指將乙個表的資料存放到多個表,然後查詢時候按id的範圍到對應的表裡去查。因為資料太多,單個表已經不足以儲存。所謂分庫就是將資料存放到多個資料庫中,訪問時訪問其中乙個庫。社群已經黃了,基本不用了。不支援聯表,且依賴diamon...

mycat實現mariadb讀寫分離 分庫

節點名稱 節點ip 埠master 127.0.0.1 3306 sl e 127.0.0.1 3305 mycat 127.0.0.1 8066 9066 1 mariadb安裝 新建主節點配置檔案 docker啟動時會把此檔案掛載到容器中 mkdir opt software mariadb m...