實時數據緩存管理的初步設計

對於實時較大數據量的緩存管理上,設計的方式有很多。在此提出一種初步的、較粗略的思路,僅供參考。背景:系統分爲三層,數據採集層(採集底層的數據),消息管理層(對採集上來的數據進行處理)、消息接口層(對消息解析封裝、處理客戶端的Socket請求等)。

在數據的緩存管理上,採用雙緩衝區模式的管理機制。 http://vcsky.net  by havenzhao

雙緩衝區模式:在內存裏開闢兩塊容量相等的緩衝區(以下將分別它們稱爲第一緩衝區和第二緩衝區)作爲連續數據輸入的緩衝區。工作開始時,採集到消息管理層的數據先寫入第一緩衝區中,在第一緩衝區寫滿後,再寫入第二緩衝區,當把數據寫入第二緩衝區的同時,數據處理線程根據自身需要取出第一緩衝區中的數據做特定的處理,例如存文件,存儲完畢後,將緩衝清空,等待再次被寫入。當第二緩衝區被寫滿後,再回到第一緩衝區,把新數據寫入第一緩衝區中;與此同時數據處理線程取出第二緩衝區中的數據。整個數據緩存處理過程可以如此不斷地循環進行下去。

緩衝區的大小,可以從XML配置文件中設置,設置方式有兩種,一種爲大小模式,一種爲時間間隔模式。採用設置大小的模式後,數據寫入緩衝的判定準則爲是否到達指定的緩衝區最大容量,如果到了,就開始寫入另一個緩衝區。採用時間間隔的模式的話,則以設置的時間間隔爲準則,來切換寫入的兩個緩衝區。從而實現兩個緩衝區的交替進行,確保數據無丟失。

當一條採集數據從採集層傳到消息管理層時,首先查找設備主題,如果存在此設備ID,則設置相應的設備主題的數據,然後進入當前工作的緩衝區,增加此條數據,然後,分發給訂閱此設備的所有用戶,最後,將此數據記錄插入到levelDB數據庫中。

消息分發到消息接口層時,接口層將此條消息解析成XML格式,加上消息頭,發送給訂閱用戶。消息頭中,有一項重要的編號sn,作爲一次發送消息包的唯一編號標示。發送成功後,記錄此sn到sn的集合中。接口層等待客戶端反饋的消息,如果客戶反饋回消息來了,則提取返回的sn編號,在sn集合中進行查找,如果查找成功,那麼,刪除此sn集合中的記錄,此條數據已經完整的處理成功了。每隔5分鐘,或者其它時間段(這個時間間隔,可以在系統XML文件中設定),檢查sn集合。如果sn集合中有存在的sn記錄,則視爲發送不成功的消息記錄,此時再次重新發送。重新發送時,需要根據設備id與時間戳作爲key,從levelDB中去查找對應到的value,即數據,再結合用戶id,形成發送消息,從而發送給對應的客戶端。

sn集合包含:sn編號、用戶id、設備id、時間戳。

數據緩存插入levelDB存儲系統時,以device_id + time_stamp 爲key值,確保key值唯一,data爲value。

插入關係數據庫的話,採用分區表的機制,便於數據量過大時,提升查詢效率。

以下爲三個流程圖:

cache1

cache2

cache3

http:vcsky.net   by havenzhao

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章