mysql。PHP 後臺權限管理 模塊mysql
背景:訂單系統後臺權限管理ajax
功能要求:redis
方案:sql
表設計數據庫
用戶表 dp_system_userjson
字段session |
類型app |
默認值elasticsearch |
備註spa |
id |
int 11 |
not null |
角色id |
|
varchar 64 |
not null |
員工名,寫入爲員工擁有公司郵箱 |
gid |
int 11 |
not null |
系統 ID |
account |
varchar 32 |
not null |
員工名 |
department_id |
text 多個部門 65,657,8 |
not null |
部門 ID |
is_delete |
boolean |
0 |
是否可用 |
add_time |
int 10 |
not null |
添加時間 |
update_time |
int 10 |
not null |
更新時間 |
append_id |
int 11 |
not null |
添加人ID |
role_id |
text |
not null |
角色id |
部門表 dp_system_department
字段 |
類型 |
默認值 |
備註 |
id |
int 11 |
not null |
部門 id |
department_name |
varchar 64 |
not null |
部門名稱 |
parent_id |
int 11 |
0 |
上級部門 id |
add_time |
int 10 |
not null |
添加時間 |
append_id |
int 11 |
not null |
添加人ID |
is_delete |
tinyint |
not null |
是否刪除 |
角色表 dp_system_role
字段 |
類型 |
默認值 |
備註 |
id |
int |
not null |
角色id |
role_name |
varchar 100 |
not null |
角色名 |
add_time |
int 10 |
not null |
添加時間 |
append_id |
int 10 |
not null |
添加人ID |
is_delete |
tinyint |
not null |
是否刪除 |
常見模型 rbac (rolu based access control ) 基於角色訪問控制,由於角色多起來管理不便,因此引用了權限組,部門的概念。部門主要職責就是批量受權
然而開始設置權限就須要一個表來存容許訪問的 模塊信息與用戶信息
模塊表 dp_system_template
字段 |
類型 |
默認值 |
備註 |
例子 |
id |
int 11 |
not null |
模塊id |
1 |
template_code |
varchar 64 |
not null |
模版code |
order.order_list |
template_name |
varchar 64 |
not null |
模版 名字 |
訂單查詢列表 |
add_user |
int 11 |
not null |
添加人 |
45 |
last_time |
int 10 |
not null |
修改時間 |
154234657 |
is_delete |
boolean |
not null |
是否可用 |
0 |
容許訪問信息表dp_system_permission
字段 |
類型 |
默認值 |
備註 |
id |
int 11 |
not null |
id |
role_id |
int 11 |
not null |
權限ID |
template_id |
int 11 |
not null |
模版id |
模塊可能無限增加,方便查詢效率高,模塊ID與 權限ID 多對多存儲。
後來mysql主表日增數據 100,000。經歷三個月,數據量到達 9,000,000。業務員2000,每次訪問數據,先篩選能夠訪問的權限店鋪,而後 in 範圍查詢,形成查詢壓力旁大,解決方案:
案例sql
select * from om_unshipped_order where id in (29765473,,,,,省略4000id)and accountId in(567,,,省略200id)limit 50。
1,備份數據庫,一個月備份一次,備份出完結訂單涉及的表數據,減小數據庫壓力。
2,能夠作成查詢延後,首次告訴已經接受請求請稍後,ajax輪訓,監控結果,後臺PHP分頁運行計算結果後,放入一個文件中,文件內容只含有orderid,一行一個,便於頁面讀取分頁讀取數據,二次查詢數據庫查詢出結果,文件名用sessionid,中途查詢關係存放到redis,保證計算出正確的文件名,方便獲取文件。
3,另一個思路,整合數據到mysql表,用於檢索須要得數據,或者放入elasticsearch,計算出咱們的結果。
4,一個思路,若是是spu,這樣的查詢,經過規則整合成int 整型,查詢就僅僅須要取出數字區間,很是快