有且只有一臺 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 文件。