標籤:http os 使用 strong sp 檔案 資料 on 2014
背景:
10w+使用者
每個使用者每天會產生有效記錄1000條,記錄組成=使用者ID、時間戳記、欄位1、欄位2、欄位N
每條記錄長度約為1K
每個使用者每天累計產生資料量=1000K,即1M
每月產生資料量為:30M
每年產生的資料量為:360M,記錄數=10003012=36w條
這些資料的特點是:一次寫入,多次讀取,中間不做任何修改!
需求:
每個使用者產生的資料,需要儲存5年以上,能夠支援隨時查詢,每次查詢的時間跨度不超過3天。
問題:
- 使用傳統的關係型資料庫(MSSQL、MySQL),如何儲存這些海量資料?並能夠支援快速查詢!
思路1:關係型資料庫儲存
按年建庫,如2014年,庫名為:User_2014,簡稱年份庫;
每個年份庫中,建立10w資料表,每張表代表一個使用者的全年記錄(至少在36w條左右,單表大小約360M+);
優點:
- 技術實現簡單,無難度;
缺點:
- 就我個人對MSSQL與MySQL的瞭解,任何一個庫中有10w張表,每張表有36w左右條記錄,當涉及到查詢、插入、備份的時候,都不是件容易的事情!
思路2:海量小檔案+關係型資料庫儲存
一、資料生產與寫入
生產者,將所需入庫的資料(初步以完整SQL語句),提交到隊列中;
消費者從隊列中擷取要入庫的資料,批量寫入到資料表中(每次寫入100條);
二、資料匯出
每天淩晨12點以後,啟動定時作業,從資料表中將前一天資料內容匯出到檔案中(按目標編號,分別匯出);
每個檔案中儲存該目標當天所有的資料記錄,每條記錄以\n\r作為結束符;
三、資料查詢
根據‘目標編號、時間範圍(最多查詢3天)、複雜查詢條件’,定位到對應的檔案,將其載入到記憶體中;
程式將記憶體中的資料,按照‘複雜查詢條件’進一步過濾,並將結果輸出;
四、檔案儲存體結構
每100個目標佔用一個目錄,即一個目錄中會有100個子目錄,如下所示:
PS:只所以讓每個目錄中所包括的目錄或檔案個數不超過100,原因是:無論是linux還是windows下,目錄中的子目錄或檔案個數超過100時,會影響OS效率。
優點:
目錄結構清晰、簡單、容易理解;
第一階段完成後,改用Hadoop或Hypertable來代替此方案(因為現在對hadoop或hypertable還不熟悉)
缺點:
- 批量備份或管理時,需要自己寫些協助工具輔助來操作。如果依賴人工手動操作,太過於麻煩!
各位看完上面的內容,那麼現在問題來了,您感覺哪種方案更可譜呢?還是您有更好的方案或建議,如果能給俺一點指教,俺將感激不盡!
大資料單表格儲存體方案