1. 情況說明
環(huán)境:Linux服務(wù)器。
數(shù)據(jù)來源:snmp命令行能得到數(shù)據(jù),獲取到服務(wù)器的CPU利用率,然后通過Linux命令能寫入數(shù)據(jù)庫,且能動態(tài)更新數(shù)據(jù)。
數(shù)據(jù)要求:通過后端框架傳遞給前端的有三十條數(shù)據(jù),是一個小時內(nèi)的服務(wù)器CPU利用率記錄,每兩分鐘更新一次。
初始想法:數(shù)據(jù)庫設(shè)計就只有一個列,存儲現(xiàn)在的服務(wù)器CPU利用率,在后端邏輯里面設(shè)計一個數(shù)組來存儲之前的數(shù)據(jù),然后動態(tài)更新那數(shù)組,后來發(fā)現(xiàn)根本不可行(或者可能是可行的,但我不知道咋搞)。以下原因分析內(nèi)容是我猜的,因為后端好像是前端每訪問一次,才返回前端一個結(jié)果,訪問一次才運行一次,所以沒法一直運行。但是那數(shù)組肯定要一直都存儲的是過去30次記錄啊,沒法一直運行就沒法實現(xiàn)數(shù)據(jù)存儲更新。還有一個問題是我也剛學(xué),就會用SpringBoot框架,但不懂其中細(xì)節(jié)原理,也不知道該把數(shù)組定義放在哪。
2. 解決方法
方法:數(shù)據(jù)庫設(shè)計時設(shè)計3個列(利用率,數(shù)據(jù)id,當(dāng)前時間)分別存儲過去30個數(shù)據(jù),id是更新數(shù)據(jù)庫的時候能分清哪條數(shù)據(jù)是哪條,當(dāng)前時間就是給人看的。然后寫一個觸發(fā)器函數(shù),每插入一個數(shù)據(jù)時,就刪除最前面的那條數(shù)據(jù),然后更新前面的數(shù)據(jù)的id。
數(shù)據(jù)庫表設(shè)計如下:
?
?
觸發(fā)器設(shè)計如下:
?
?里面有個temp表,原因是如果mysql數(shù)據(jù)庫向原表? 插入/更新 數(shù)據(jù)表之后觸發(fā)的函數(shù)還是?插入/更新 該數(shù)據(jù)表,就會陷入一種死循環(huán),所以設(shè)計了一個和CpuUseRatio一樣的表,只存儲一條數(shù)據(jù),即當(dāng)前的最新CPU利用率,然后更新temp表時,就更新CpuUseRatio存儲數(shù)據(jù)。
?
?
?
?最終效果
?
本文摘自 :https://www.cnblogs.com/