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

  以前的文章「分而治之」在介紹大表分區時,做者還沒有實現不一樣的分區策略,即只能按指定的分區鍵進行分區。此次做者完善了一下分區策略,在規劃大表分區時能夠按Hash或者時間範圍進行分區,因此本篇介紹不一樣的分區策略適用的場景,同時介紹一下表掃描時如何指定從特定分區查詢數據。框架

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

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

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

1. 指定鍵值分區

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

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

2. 鍵值Hash分區

添加分區鍵時指定成員並指定Hash數量做爲分區鍵,適用於基礎數據須要分區,且分區的總數能夠肯定在必定範圍內。虛擬機

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

3. 時間範圍分區

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

4. 組合分區

能夠添加多個分區鍵組合分區,如SaaS應用按租戶而後按年進行分區。
io

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

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

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還沒有實現。基礎

3、小結:

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

相關文章
相關標籤/搜索