全部產品
Search
文件中心

Tablestore:二級索引計量計費

更新時間:Jun 30, 2024

二級索引包括全域二級索引和本地二級索引。使用二級索引功能將產生額外的資料存放區量。當向資料表寫入資料時,在建立索引的過程中將產生一定的讀寫CU。本文介紹二級索引費用組成及計費方式。

計費說明

索引的資料存放區、計算以及讀取的規則如下:

  • 儲存與讀取的計算規則均與資料表相同。更多資訊,請參見計費概述

  • 索引表構建時的計量規則如下:

    • 只有產生了有效索引行才會產生寫CU。

    • 只要可能產生舊索引行的刪除、舊索引行的更新、新索引行的寫入,均會產生與索引列大小之和相當的讀輸送量。

計費項目

使用二級索引功能後,由於索引表的存在將產生額外的資料存放區量。當向資料表中寫入資料時,在建立索引的過程中將產生一定的讀寫CU。

索引表相關的計費項目包括索引表資料存放區量、構建索引表的讀輸送量、構建索引表的寫輸送量和索引表讀輸送量四部分。

計費項目

說明

索引表資料存放區量

索引表的資料存放區費用。單位為GB。

構建索引表的讀輸送量

為了支援索引行的計算(舊行刪除、新行寫入、原始行更新)而進行的讀操作所產生的讀輸送量。單位為CU

構建索引表的寫輸送量

向索引表中寫入索引行所產生的寫輸送量。單位為CU

索引表讀輸送量

通過讀介面對索引表進行讀取所產生的讀輸送量。單位為CU

索引表資料存放區量

索引表資料存放區量與資料表無區別。索引表的資料量是索引表中所有行的資料量之和,所有行的資料量是所有單行資料的主鍵和屬性列資料量之和。更多資訊,請參見資料存放區量

構建索引表的讀輸送量

為資料表建立二級索引時,會產生一定量的讀輸送量。具體規則請參見下表。

操作環境

計費規則

通過PUT操作寫入一行資料

非覆蓋寫情境(此行資料以前不存在)

  • 如果資料表的非主鍵列上建有索引,但是此行資料不包含索引列(即此行不會產生索引行),則只產生1個讀CU。

  • 如果此行資料所在的列建有索引,並且可以根據此行資料建立有效索引(即此行會產生索引行),則產生1個讀CU。

覆蓋寫情境(此行資料以前存在)

  • 如果資料表的非主鍵列上建有索引,但此行資料舊值的非主鍵列不包含索引列,則只產生1個讀CU。

  • 如果此行資料舊值所在的列建有索引,產生的讀CU如下:

    該行舊值中除主鍵外所有與索引表主鍵相關列的大小之和,按4 KB向上取整。如果為0,則按1 CU計算。

通過UPDATE操作更新一行資料

非更新情境(此行資料以前不存在)

  • 如果此行資料不涉及任何與索引表相關的列,則不產生讀CU。

  • 如果此行資料涉及與索引表相關的列,則產生1個讀CU。

更新情境(此行資料以前存在)

  • 如果此次更新涉及到的所有屬性列與任何索引表都無關,則不產生讀CU。

  • 如果此次更新涉及到的所有屬性列中存在部分列作為索引表的主鍵或者屬性列,產生的讀CU如下:

    該行舊值中除主鍵外所有與索引表主鍵相關列的大小之和,按4 KB向上取整。如果為0,則按1 CU計算。

通過DELETE操作刪除一行資料

產生的讀CU如下:

該行除主鍵外所有與索引表主鍵相關列的大小之和,按4 KB向上取整。如果為0,則按1 CU計算。

對於主鍵列自增的資料表,新寫入資料時不產生讀CU。修改一行通過主鍵自增寫入的資料時會產生讀CU,計算規則與通過UPDATE操作更新一行資料計算規則相同。

說明

通過主鍵列自增功能寫入資料可以極大減少由於索引表而產生的讀CU。

對於非主鍵列自增的資料表,只要發生了與索引相關列的讀取,即使未讀取到資料,仍會產生1個讀CU。但對於主鍵列自增的資料表,新寫入資料時不會發生索引相關列的讀取,不產生讀CU。

構建索引表的寫輸送量

為寫入資料表中的資料建立二級索引時,會產生一定量的寫輸送量。

對資料表寫入一行資料後,根據索引表的資料是否變化,產生的寫CU規則如下:

  • 如果索引表的資料沒有發生變化,則不產生寫CU。

  • 如果索引表增加了一行,則產生與增加的索引行大小相當的寫CU。

  • 如果索引表更新了一行,則產生與更新的索引行屬性列大小相當的寫CU。

  • 如果索引表刪除了一行,則產生與刪除的索引行大小相當的寫CU。

  • 如果索引表刪除了一行並且又增加了一行,則產生與刪除的索引行和增加的索引行之和大小相當的寫CU。

具體計算規則請參見下表。

操作環境

計費規則

通過PUT操作寫入一行資料

非覆蓋寫情境(此行資料以前不存在)

  • 如果資料表的非主鍵列上建有索引,但是此行資料不涉及索引列(即此行不會產生索引行),則不產生寫CU。

  • 如果此行資料所在的列建有索引,並且可以根據此行資料建立有效索引(即此行會產生索引行),則每張索引表產生的寫CU如下:

    如果產生了有效索引行,索引表寫CU的個數計量與資料表相同,按4 KB向上取整,否則不產生寫CU。

覆蓋寫情境(此行資料以前存在)

  • 如果資料表的非主鍵列上建有索引,但是此行資料舊值的非主鍵列不涉及索引列,則不產生寫CU。

  • 如果此行資料舊值的主鍵或者屬性列上建有索引,則每張索引表產生的寫CU如下:

    對於該次PUT操作影響到的所有索引(稀疏索引可能不受影響),均計算相應的寫CU。

通過UPDATE操作更新一行資料

非更新情境(此行資料以前不存在)

  • 如果此行資料不涉及任何索引表相關的列,則不產生寫CU。

  • 如果此行資料涉及索引表相關的列,則每張索引表產生的寫CU如下:

    • 如果該行能夠產生有效索引行,則以索引行的大小除以4 KB向上取整進行寫CU計量。

    • 如果該行不能夠產生有效索引行,則不會產生索引表的寫CU。

更新情境(此行資料以前存在)

  • 如果此次更新涉及到的所有屬性列,都與任何索引表無關,則不產生寫CU。

  • 如果此次更新涉及到的所有屬性列中,部分列作為索引表的主鍵或者屬性列,則每張索引表產生的寫CU如下:

    • 如果該行的舊值產生了有效索引行,則按舊的索引行的主鍵大小,產生索引行的刪除CU。

    • 如果該行的新值產生新的有效索引行,則按新的索引行的主鍵大小,產生新的索引行的寫入CU。

    • 如果該行的新值沒有產生新的有效索引行,只是更新了舊的索引行的屬性列,則只產生舊的索引行的更新CU。

    計算規則均按索引行的大小除以4 KB向上取整。

通過DELETE操作刪除一行資料

產生的寫CU如下:

對每張索引表,如果該行有相應的索引行,則該行中所有與索引表主鍵相關的列的大小之和,按4 KB向上取整,否則寫CU為0。

對於主鍵列自增的資料表,新寫入資料時會產生索引表的寫CU,寫CU計算規則與通過PUT操作寫入一行新資料計算規則相同。修改一行通過主鍵列自增寫入的資料時,會產生寫CU,計算規則與通過UPDATE操作更新一行資料計算規則相同。

索引表讀輸送量

通過Table Store控制台、SDK或者其他途徑(例如DataV)進行索引表的讀取時,讀輸送量的計量規則與資料表相同。

計算樣本

此處以包含兩張索引表的資料表為例介紹在不同寫入模式下CU的計算。

假設有資料表Table,其中有兩列主鍵PK0和PK1 ,三列預定義列Col0、Col1、Col2。資料表上建有兩張索引表Index0和Index1。其中Index0的主鍵為Col0、PK0、PK1,有一屬性列Col2;Index1的主鍵為Col1、Col0、PK0、PK1,沒有屬性列。通過UPDATE介面更新PK0、PK1。

  • 該行以前不存在

    • 如果更新Col3列,則不產生讀寫CU。

    • 如果更新Col1列,則產生1個讀CU,不產生寫CU。

    • 如果更新Col0和Col1兩列,則產生1個讀CU。

      對於Index0,產生與Col0、PK0、PK1大小之和相當的寫CU。對於Index1,產生Col0、Col1、PK0、PK1大小之和相當的寫CU。

  • 該行以前存在

    • 如果更新Col3列,則不產生讀寫CU。

    • 如果更新Col2列,則產生舊的Col0列大小相當的讀CU,如果Col0列以前不存在,則按1 CU計算。

      對於Index0,如果Col0列以前不存在,則不產生寫CU;如果Col0列以前存在,則產生Col0、PK0、PK1、Col2大小之和相當的寫CU。對於Index1,則不產生寫CU。

    • 如果更新Col1列,則產生舊的Col0列以及Col1列大小之和相當的讀CU。如果為0,則按1 CU計算。

      對於Index0,不產生寫CU。對於Index1,會產生舊的Col0 、新的Col1列、PK0、PK1大小之和相當的寫CU(寫入新的索引行)。如果舊的Col0列不存在,則不產生寫CU(沒有產生新的索引行)。如果舊的Col0列以及舊的Col1列都存在,則會產生舊的Col0、舊的Col1、PK0、PK1大小之和相當的寫CU(刪除舊的索引行)。