天天看點

Tablestore入門手冊--資料表meta資訊介紹

若有幸這篇文章也許會是您準備上手實踐Tablestore的第一篇幫助文檔,本文将通過介紹Tablestore的基礎模型使大家了解Tablestore的資料表結構。主要講如何設定資料表的Meta資訊,建一張最适合自己業務的表,祝閱有所得,漫步雲端。

控制台建立資料表

Tablestore控制台

登入入口

資料表meta參數解讀

資料表meta參數的設定選擇:

Tablestore入門手冊--資料表meta資訊介紹
  • 資料表名稱:資料表名稱在單個執行個體中必須是唯一的。
  • 預留讀/寫吞吐量:與 計量計費 相關,高性能執行個體下表的屬性資訊包含預留讀/寫吞吐量,預留值可以設定為 0。預留讀/寫吞吐量的設定不影響資料表的讀寫性能和服務能力。若預留讀/寫吞吐量不為 0,資料表建立後,将會按照預留吞吐量立即開始計費。(如果是長期有穩定讀寫量的業務,選擇配置合适的預留讀寫量,超出部分按量付費可以優化成本)
  • 資料生命周期(Time To Live):每個表可定義資料生命周期,例如生命周期配置為一個月,則該表資料中在一個月之前寫入的資料就會被自動清理。資料的寫入時間由版本來決定,版本一般由服務端在資料寫入時根據伺服器時間來定,也可由應用自己指定。(Tablestore暫時不提供批量删除的操作,合理設定資料的生命周期可以高效地清除過期資料 )
  • 最大資料版本(MaxVersion):每個表可定義每一列最多儲存的版本數,用于控制一列的版本的個數,老版本的超過個數上限的資料會被自動清理。
  • 資料有效版本偏差:屬性列的有效版本範圍為:

    [資料寫入時間 - 有效版本偏差,資料寫入時間 + 有效版本偏差)

    。屬性列版本号為毫秒,其除以 1000 換算成秒之後必須屬于這個範圍。如果當版本不屬于這個 範圍 ,該行資料寫入失敗。
  • 主鍵(Primary Key):主鍵由(1-4列)主鍵列構成,建表時明确每列主鍵列資料類型,主鍵的配置及順序一旦設定便不可修改,主鍵唯一區分一行資料。主鍵列支援多種資料類型(Integer、String、Binary),非分片鍵可以設定為自增列(寫入資料時自動生成且分區内嚴格遞增)。
  • 預定義列:Tablestore的屬性列Schema free,原則上一行資料可以寫入任意列,無需固定屬性列schema。但是也可以在建表時預先定義一些列固定schema,主要用于建立 二級索引 ,二級索引暫不支援多版本。

資料表結構解讀

插入一些資料來看資料表的結構:

Tablestore入門手冊--資料表meta資訊介紹
  • 行:表是行的集合,而每個行是主鍵和屬性的集合。
  • 列:分為主鍵列和屬性列,主鍵列的集合稱為本行的主鍵,屬性列的集合稱為本行的屬性。建立表的時候,必須明确指定主鍵、每一個主鍵列的名字、資料類型以及主鍵列的順序。Tablestore根據表的主鍵索引資料,表中的行會按照主鍵進行升序排序。每行的屬性列個數沒有限制,即每行的屬性列可不同,一個屬性列在某一行的值可為空,同一個屬性列的值可以有多種資料類型。
  • 版本:每次更新屬性列的值都會為該值生成一個新版本,每個版本會帶一個可自定義的版本号,預設是目前時間的毫秒機關時間戳。
  • 資料生命周期:資料的存活時間,機關為秒。Tablestore會在背景對超過存活時間的資料進行清理,以減少使用者的資料存儲空間,降低存儲成本。

Tablestore的資料表結構可以了解為一張三維表,以主鍵做唯一區分的每一行,行中列的數目不需要提前定義,列的資料類型也不需要提前定義;在此基礎上增加時間次元,展現為屬性列可以儲存多個版本,每個版本有一個Timestamp作區分。

更多建表方式

CLI工具建立資料表

  • TablestoreCLI工具建表 步驟
Tablestore入門手冊--資料表meta資訊介紹

使用SDK建立資料表

  • 使用SDK建立資料表的參數清單、樣例代碼詳見各語言的SDK建表頁。例: JAVA
private static void createTable(SyncClient client) {
        TableMeta tableMeta = new TableMeta(TABLE_NAME);
        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME, PrimaryKeyType.STRING)); // 為主表添加主鍵列。
        int timeToLive = -1; // 資料的過期時間,機關秒, -1代表永不過期,例如設定過期時間為一年, 即為 365 * 24 * 3600。
        int maxVersions = 3; // 儲存的最大版本數,設定為3即代表每列上最多儲存3個最新的版本。
        TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
        CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
        request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); // 設定讀寫預留值,容量型執行個體隻能設定為0,高性能執行個體可以設定為非零值。
        client.createTable(request);
    }           

表設計優化

表設計優化的重點是主鍵的設計,以資料散列為目标,使資料分布更均勻,避免熱點,詳細

表設計優化參考