二級索引包括全域二級索引和本地二級索引。使用二級索引功能將產生額外的資料存放區量。當向資料表寫入資料時,在建立索引的過程中將產生一定的讀寫CU。本文介紹二級索引費用組成及計費方式。
計費說明
索引的資料存放區、計算以及讀取的規則如下:
儲存與讀取的計算規則均與資料表相同。更多資訊,請參見計費概述。
索引表構建時的計量規則如下:
只有產生了有效索引行才會產生寫CU。
只要可能產生舊索引行的刪除、舊索引行的更新、新索引行的寫入,均會產生與索引列大小之和相當的讀輸送量。
計費項目
使用二級索引功能後,由於索引表的存在將產生額外的資料存放區量。當向資料表中寫入資料時,在建立索引的過程中將產生一定的讀寫CU。
索引表相關的計費項目包括索引表資料存放區量、構建索引表的讀輸送量、構建索引表的寫輸送量和索引表讀輸送量四部分。
計費項目 | 說明 |
索引表的資料存放區費用。單位為GB。 | |
為了支援索引行的計算(舊行刪除、新行寫入、原始行更新)而進行的讀操作所產生的讀輸送量。單位為CU。 | |
向索引表中寫入索引行所產生的寫輸送量。單位為CU。 | |
通過讀介面對索引表進行讀取所產生的讀輸送量。單位為CU。 |
索引表資料存放區量
索引表資料存放區量與資料表無區別。索引表的資料量是索引表中所有行的資料量之和,所有行的資料量是所有單行資料的主鍵和屬性列資料量之和。更多資訊,請參見資料存放區量。
構建索引表的讀輸送量
為資料表建立二級索引時,會產生一定量的讀輸送量。具體規則請參見下表。
操作環境 | 計費規則 | |
通過PUT操作寫入一行資料 | 非覆蓋寫情境(此行資料以前不存在) |
|
覆蓋寫情境(此行資料以前存在) |
| |
通過UPDATE操作更新一行資料 | 非更新情境(此行資料以前不存在) |
|
更新情境(此行資料以前存在) |
| |
通過DELETE操作刪除一行資料 | 產生的讀CU如下: 該行除主鍵外所有與索引表主鍵相關列的大小之和,按4 KB向上取整。如果為0,則按1 CU計算。 |
對於主鍵列自增的資料表,新寫入資料時不產生讀CU。修改一行通過主鍵自增寫入的資料時會產生讀CU,計算規則與通過UPDATE操作更新一行資料計算規則相同。
通過主鍵列自增功能寫入資料可以極大減少由於索引表而產生的讀CU。
對於非主鍵列自增的資料表,只要發生了與索引相關列的讀取,即使未讀取到資料,仍會產生1個讀CU。但對於主鍵列自增的資料表,新寫入資料時不會發生索引相關列的讀取,不產生讀CU。
構建索引表的寫輸送量
為寫入資料表中的資料建立二級索引時,會產生一定量的寫輸送量。
對資料表寫入一行資料後,根據索引表的資料是否變化,產生的寫CU規則如下:
如果索引表的資料沒有發生變化,則不產生寫CU。
如果索引表增加了一行,則產生與增加的索引行大小相當的寫CU。
如果索引表更新了一行,則產生與更新的索引行屬性列大小相當的寫CU。
如果索引表刪除了一行,則產生與刪除的索引行大小相當的寫CU。
如果索引表刪除了一行並且又增加了一行,則產生與刪除的索引行和增加的索引行之和大小相當的寫CU。
具體計算規則請參見下表。
操作環境 | 計費規則 | |
通過PUT操作寫入一行資料 | 非覆蓋寫情境(此行資料以前不存在) |
|
覆蓋寫情境(此行資料以前存在) |
| |
通過UPDATE操作更新一行資料 | 非更新情境(此行資料以前不存在) |
|
更新情境(此行資料以前存在) |
| |
通過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(刪除舊的索引行)。