這個小文章裏儘量避免使用數據挖掘的概念, 爭取用簡單的語言解釋出來, 如果以後有時間, 再仔細介紹幾種開源時序數據庫的結構和關鍵技術。
時序數據簡單的說, 就是隨着時間流而不斷產生的數據, 比如一臺服務器的cpu負載, 或者一個應用的log文件等。 對於這種時序數據, 有一些常用的操作, 比如統計每分鐘的平均值, 中位數等。所謂時序數據庫, 就是針對這類場景做了優化的一類數據存儲查詢系統。在OLAP中, 此類時序數據的統計有着重要的應用。
我們用例子來說明時序數據以及對這些數據的處理。比如我們就以 cpu 使用率這個數據爲例。假設我們一個集羣有近百臺服務器, 對於每臺服務器, 我們每秒採集一次數據, 數據是服務器cpu 當前的 us sy id wa st 。那麼, 我們採集到的數據除了這幾個值之外一定還有數據的一些其它屬性, 比如採集時間, 服務器編號, 服務器物理配置,服務器上主要的應用。 這些屬性一般叫做維度(dimension)。此類數據實時產生, 我們最常用的查詢可能類似這樣:
最近1小時內, 每5分鐘cpu使用率的平均值。-----在一個時間範圍內, 按照時間段歸類, 計算均值(也可能是中位數, 最大最小值, topN等)
最近6小時內, 每5分鐘每種服務器類型cpu使用率的平均值。 最近1小時內, 每1分鐘每臺服務器的cpu使用率的平均值。
最近1小時內, 每1分鐘所有跑web service 應用的服務器的cpu使用率的平均值。
綜上, 我們看到這類數據處理基本是要對一個時間範圍的數據, 根據時間段, 維度進行歸類,做一些聚合運算。
時序數據庫要解決的問題就是如何能在海量數據中, 快速響應用戶的此類查詢。
補充一種時序數據常用的操作, count distinct(基數統計), 比如從web 服務器的log裏統計獨立訪問ip數量, 這種需求時序數據庫也必須要解決。
時序數據庫面臨的主要困難是, 數據量大, 數據的維度多, 統計查詢複雜, 需要快速響應查詢。
時序數據有一個比較大的特點, 就是數據的價值隨着時間流逝而逐步降低。
時序數據庫解決這些問題的主要的技術手段有:分佈式處理, 按照時間分片存儲,按照維度條件做哈希, 通過位圖索引優化查詢, 儘量保證最新數據在內存中, 使用統計算法。後面我們以druid (http://druid.io/)爲例來具體介紹這些技術的實現。 順便提一下, druid 的文檔寫的不好, 甚至還有錯誤,如果想要測試druid, 要文檔和 google group 結合起來。
廣告時間
大數據處理招聘了
要求算法 數據結構等基礎知識紮實
良好的編程功底
瞭解大數據解決方案
有過高併發高壓力系統設計開發經驗
熟練使用Linux系統 瞭解Linux內核
工作地點在大連
工作內容 line 相關大數據處理
聯繫方式 簡歷發送至 dl_server_developer_recruit%nhn.com