AppBoxFuture: 大數據表分區的3種策略

  之前的文章“分而治之”在介紹大表分區時,作者尚未實現不同的分區策略,即只能按指定的分區鍵進行分區。這次作者完善了一下分區策略,在規劃大表分區時可以按Hash或者時間範圍進行分區,所以本篇介紹不同的分區策略適用的場景,同時介紹一下表掃描時如何指定從特定分區查詢數據。

一、分區策略及其適用場景:

  在新建實體模型時,根據數據是否動態增長以及預估數據規模後確定合適的分區策略,另外根據作者虛擬機的配置單分區的記錄數在100萬內比較合適:

注意:實體成員作爲分區鍵時是隻讀的,實體保存後不能修改分區鍵。

1. 指定鍵值分區

添加分區鍵時指定某個實體成員作爲分區鍵,適用於:

  • SaaS類應用按租戶進行數據分區;
  • 基礎數據如商品按不同類型進行數據分區;
  • 動態數據如結算單按不同賬期進行數據分區。

2. 鍵值Hash分區

添加分區鍵時指定成員並指定Hash數量作爲分區鍵,適用於基礎數據需要分區,且分區的總數可以確定在一定範圍內。

注意:Hash分區在查詢數據指定分區謂詞時只能進行相等判斷

3. 時間範圍分區

添加分區鍵時指定時間類型的成員並指定按年、月、日作爲分區鍵,適用於動態增長的數據按時間範圍進行分區,最簡單的例子是訂單按年分區存儲。

4. 組合分區

可以添加多個分區鍵組合分區,如SaaS應用按租戶然後按年進行分區。

二、如何從指定分區查詢數據:

  之前實現的TableScan在掃描表數據時,如果是分區表會依次掃描各個分區,這次作者完善了一下TableScan的實現,在明確知道數據在哪個分區或分區範圍內時,可以指定分區謂詞,從而從指定的表分區內掃描數據。示例代碼如下:

var q = new TableScan<Entities.VehicleState>();
            q.Partitions.Equal(t => t.VehicleId, 1); //指定分區謂詞1
            q.Partitions.Equal(t => t.CreateTime, new DateTime(2019, 6, 29)); //指定分區謂詞2
            return await q.ToListAsync(); //從指定分區掃描數據

注意:目前僅實現謂詞的相等判斷且必須指定全部分區鍵謂詞(即目前只能從確定分區內掃描),>, >=, <, <=, Between尚未實現。

三、小結:

  本篇主要介紹了大表分區的策略及其適用場景,Github上的運行時已經更新可測試,如果您有問題或Bug報告,請留言或提交Issue。另外您的關注與點贊將是作者最大的動力,以驅動作者全力以赴完成這個框架。

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