單臺服務器的數據統計設計

背景

有且只有一臺 db 服務器提供服務,該服務器同時支撐業務和統計須要。mysql

統計的表單須要導出成 excel,且後續不能肯定該表單是否還會修改。sql

導出數據的同時,須要爲數據寫入導出標識。mongodb

導出的數據總條數未作限制(有,可是範圍比較大).數據庫

目前主要是導出結算單和申述單的支付統計。服務器

數據庫設計

針對上述背景,爲了防止在執行導出操做時候形成對在線運行業務的影響,採用了mysql + mongodb 的方案,導出時候的查庫和寫庫操做都在 mongodb 中執行。數據庫設計

數據庫設計以下:spa

 

一、MySQL中存儲的是業務數據。設計

由於統計查詢涉及到多張表,因此這裏將使用到的各個表的字段作成了視圖。excel

視圖建表語句爲對象

CREATE OR REPLACE VIEW view_name AS 

SELECT fields FROM table1, table2 where condition.

二、mongodb 中是統計使用的數據。每一個數據有兩個附屬字段記錄上次數據的同步時間last_sync_time 以及該條數據的最近變動時間last_update_time。

當統計程序修改 mongodb 中的數據同時,修改數據的最近變動時間。

三、運行數據同步腳本的時候,首先將 last_sync_time 不等於 last_update_time 的數據回寫入 mysql 數據庫(寫入對象是視圖);而後將 MySQL 中,建立時間大於 last_sync_time 的數據同步到 mongo 中(由於 mongo 中的數據是累加的,因此這裏的 last_sync_time 取最近的一次便可)。

程序統計

一、爲了快速更新 mysql 中的數據,使用

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) 

-> ON DUPLICATE KEY UPDATE cc=c+1; 

提升批量更新數據的效率。

二、使用 PHPExcel 生成 Excel 文件。

相關文章
相關標籤/搜索