建模雜談系列30 報表的設計與mysql儲存

2021-10-24 16:11:32 字數 2176 閱讀 1583

主要為了展示報表資料

1 使用flask(藍圖模式)啟動網路服務

2 使用mysql儲存**資料(通過pymysql和flask sqlalchemy)

當需要從外部灌入資料時,使用pymysql進行資料匯入;在flask提供服務時,則使用sqlalchemy方便的獲取所需的資料。

1 假設現在我們能獲取一些資料,從這些資料裡需要提煉出彙總資料展示(例如行業資料)

2 假設使用者可能上傳資料,我們計算完成後存入資料庫

從聚合的角度看,從原始資料表中使用維度,對變數進行某種匯聚。

可以每種報告一張資料表

字段如下:

idname

version

report_id

var_id

valdim1

dim2

…create_time

update_time

記錄id

簡稱,主要是為了sqlalchemy展示

報告版本(可以重新整理)

報告id,不同的報告對應了不同的統計方法

var_id 對應統計的變數,使用id的目的是可以靈活重定義名稱

浮點數值

分類維度1

分類維度2

其他維度,每種報告的維度不一致

建立時間

修改時間 - 如果當期報告有錯誤的話

對應的report_id 和 var_id可以另外起錶儲存。

idname

version

report_id

file_id

user_id

var1

var2

…create_time

update_time

記錄id

簡稱,主要是為了sqlalchemy展示

報告版本(可以重新整理)

報告id,不同的報告對應了不同的統計方法

檔案id,對應某個上傳檔案

使用者id

指標1的值

指標2的值

根據不同報表指標數不固定,最好預留三個

建立時間

修改時間 - 如有錯誤

report_id可以另外起錶儲存,比較特別的是變數對映表。有乙個字段儲存var1, var2的字段和原始欄位名稱對映。

例如,在表中存的不是原始值,而是某個id。然後為這個欄位的id另外建立一張表,這個表就是對映表。

什麼時候需要用對映表?

另外乙個小點是,不要把這些鍵值做外來鍵關聯,萬一要刪表還挺麻煩的(雖然在狗書中資料物件經常這麼關聯)。除非關係非常明確,以後也不打算改了,否則最好不要這麼做。

我的建議是:把對映表作為靜態資源,在伺服器啟動時載入。

例如,啟動時將變數的對映表載入,變為字典。(對應的,有可能需要有個檢視函式負責reload,對應靜態表偶爾的變動,又不必重啟服務)

結構化庫由於要「結構化」字段,因此橫表收到的字段規劃限制較多。如果改為豎表可以增加靈活性,但是會讓行數邊的比較誇張,並且提取資料時稍微麻煩一點。據說mysql單錶的上限大約是5000萬條左右,所以要均衡一下。

以分析為主的報表以豎表儲存,以事實為主的報表以橫表儲存。

例如行業彙總資料存豎表,方便隨時替換分析。

我覺得應該按照使用的功能和時間兩個維度,拆成多個表。

功能上分表有點類似不把雞蛋放在乙個籃子裡,互不干涉。而時間上分表也是必然,提高響應速度。

如果某個表可能來自多個資料來源,應該增加乙個資料來源字段,使用時有可能進行切換和取捨。例如,在某種情況下優先選用x資料來源的資料。不過這部分屬於主資料整合,邏輯上可以認為放在更早的步驟完成。如果業務上有需求,可以建master_a, master_b之類的,在使用時應該是不需要管處理邏輯的。

確認遷移的行和列。

首先確認目標列可以相容當前的資料格式。因為是報表,大部分是浮點數值型變數,應該比較容易達到這個要求。

另外要確認關鍵的id指標(用來篩選行),用於辨識行的。

通常哪類報表需要遷移?

與某個使用者或檔案關聯的個性化報表需要遷移。彙總型的大不了重新灌一次資料就可以了。

以上基本是原則和方法,以後有機會我補充例項

Java設計模式菜鳥系列 七 命令模式建模與實現

命令模式 command 將 請求 命令 口令 封裝成乙個物件,以便使用不同的請求 佇列或者日誌來引數化其物件。命令模式也支援撤銷操作。命令模式的目的就是達到命令的發出者和執行者之間解耦,實現請求和執行分開。示例 以咱去餐館吃飯為例,分為3步 1 和小二說,來個宮保雞丁 顧客發出口令 2 小二來了一...

Java設計模式菜鳥系列 九 外觀模式建模與實現

外觀模式 facade 是為了解決類與類之間的依賴關係的,像spring一樣。能夠將類與類之間的關係配置到配置檔案裡,而外觀模式就是將他們的 關係放在乙個facade類中,減少了類與類之間的耦合度,該模式中沒有涉及到介面。演示樣例 外觀模式,也稱門面模式 長處 為了解決類與類之間的依賴關係。減少了類...

Java設計模式菜鳥系列 七 命令模式建模與實現

命令模式 command 將 請求 命令 口令 封裝成乙個物件,以便使用不同的請求 佇列或者日誌來引數化其物件。命令模式也支援撤銷操作。命令模式的目的就是達到命令的發出者和執行者之間解耦,實現請求和執行分開。演示樣例 以咱去餐館吃飯為例,分為3步 1 和小二說,來個宮保雞丁 顧客發出口令 2 小二來...