1. 程式人生 > >資料親和架構--子集篩選

資料親和架構--子集篩選

        之前談到資料同步,但我們知道,業務服務使用的資料和儲存的資料是不完全一樣。服務用到的資料是儲存資料集合或者混合衍生集合的子集。因此,程序之間資料的同步更像是物化檢視的同步。除了Oracle外,mysql對物化檢視並沒有很好的支援。而且檔案和NoSQL類的資料管理系統,也有類似的子集同步需求。

        子集同步本身,我們需要將這個過程分成幾個步驟。首先是記憶體中資料同步,其次是靜態資料的篩選,最後是增量資料的篩選。當子集被篩選出來後,在同步技術上和資料同步這個節所提到的資料庫和靜態檔案同步技術,並沒有本質上的差別。不同的是,子集同步多出一個步驟篩選。子集因為存在篩選,所以在範圍上和資料同步是不一樣的。資料親和架構一直強調,程序和資料繫結,架構自動同步程序需要的資料,而子集所定義的資料範圍才真正是程序所需要的資料。因此,子集同步才是真正有意義,是程序所需要的資料同步。

        篩選觸發的增量和儲存觸發的增量,在技術上有很大的問題。儲存觸發的增量在實踐中比較簡單,原始資料和變更後的資料儲存在同一個地方,兩者直接對比,就可以釋出變更的資料。篩選則不同,篩選包括四個步驟:(1)捕獲原始資料的變更;(2)原始資料條件判斷;(3)原始資料的欄位選擇;(4)和同一記錄的上一次結果比對差異。與此同時,篩選計算是在記憶體中完成的,和結果儲存通常不是在一個地方,只有在計算結果和上次儲存結果存在差異,才被認為發生了變更。子集的增量變更因為存在上述兩點,導致難度要高於全集的增量變更。在市面上,並沒有完成這個功能的現成元件。

        子集的增量是基於儲存增量變化的流式變化,在加上篩選,從廣義上來看,可以視為一種流式計算。但從業務開發者角度來看,卻不能視之為一個流式計算,因為他需要更為簡單的介面和實現方式,如SQL語法。在資料親和架構的設計之初,就是從業務開發這角度來思考這個問題,因此,如何提高開發效率也是一個重要的考慮因素。