odoo關於計算欄位store=True時導致的安裝/更新時間較長問題的解決方案
阿新 • • 發佈:2022-12-02
Odoo安裝/更新模組原理
Odoo每次安裝/更新模組時,會進行以下幾步處理:
- 1.判斷是否需要建立表,如果需要建立且表不存在,則進行表的建立(不進行欄位的建立);
- 2.獲取該表中已經存在的欄位;
- 3.獲取odoo模型中的所有欄位;
- 4.遍歷欄位,對需要儲存的欄位,進行欄位的更新/建立,欄位屬性的更新;
- 5.如果是compute欄位且store=True,則將compute方法加入任務佇列,進行歷史資料的計算儲存;
因為呼叫的是Odoo的ORM,會導致計算儲存時間過長;
解決方案
Odoo安裝/更新模組時間過長解決方案
方案1
原理:不使用compute欄位,每次儲存某關鍵欄位時呼叫方法
- 1.不使用compute型別而改為常規型別;
- 2.歷史資料在安裝/更新時使用sql處理;
- 3.新記錄使用depends/contrains方式在儲存資料時呼叫函式解決;
方案2
原理:預先使用sql建立欄位在安裝/更新時會跳過compute方法
- 1.使用compute欄位;
- 2.在安裝/升級模組前先使用sql給表新增欄位及新增值;
- 3.安裝/升級模組後走compute方法;
方案3
原理:安裝/更新模組跳過python方法,使用sql計算值
- 1.使用compute欄位;
- 2.在安裝/更新模組時,不觸發方法;新記錄觸發;
- 3.安裝/更新後,使用sql處理歷史資料;
具體原理請結合 odoo安裝/更新模組原理 一節理解。