讀取數(shù)據(jù)
表格存儲(chǔ)提供了GetRow接口用于讀取單行數(shù)據(jù)以及BatchGetRow、GetRange等接口用于讀取多行數(shù)據(jù)。
組成表的基本單位為行,行由主鍵和屬性列組成。其中主鍵是必須的,且每一行的主鍵列的名稱和類型相同;屬性不是必須的,且每一行的屬性可以不同。更多信息,請(qǐng)參見寬表模型介紹。
注意事項(xiàng)
當(dāng)要讀取帶有自增主鍵列的表數(shù)據(jù)時(shí),請(qǐng)確保已獲取到包含自增主鍵列值在內(nèi)的完整主鍵。更多信息,請(qǐng)參見主鍵列自增。
如果未記錄自增主鍵列的值,您可以使用范圍讀取數(shù)據(jù)按照第一個(gè)主鍵列確定范圍讀取數(shù)據(jù)。
讀取單行數(shù)據(jù)
調(diào)用GetRow接口讀取一行數(shù)據(jù)。適用于能確定完整主鍵且要讀取行數(shù)較少的場景。
讀取單行數(shù)據(jù)時(shí),您可以配置如下條件過濾所需數(shù)據(jù)。
系統(tǒng)默認(rèn)返回所有列,您可以配置只返回指定列的數(shù)據(jù)。
使用過濾器獲取符合過濾條件的行數(shù)據(jù)。更多信息,請(qǐng)參見過濾器。
如果為數(shù)據(jù)表配置了數(shù)據(jù)多版本,則您可以配置最多讀取幾個(gè)版本數(shù)據(jù)、讀取指定時(shí)間范圍或者指定版本號(hào)的數(shù)據(jù)。關(guān)于數(shù)據(jù)多版本的更多信息,請(qǐng)參見數(shù)據(jù)版本和生命周期。
讀取結(jié)果可能有如下兩種情況:
如果該行存在,則返回該行的各主鍵列以及屬性列。
如果該行不存在,則返回結(jié)果中不包含行,并且不會(huì)報(bào)錯(cuò)。
批量讀取數(shù)據(jù)
調(diào)用BatchGetRow接口一次請(qǐng)求讀取多行數(shù)據(jù)或者一次對(duì)多張表進(jìn)行讀取。適用于能確定完整主鍵,且要讀取行數(shù)較多或者要讀取多個(gè)表中數(shù)據(jù)的場景。
BatchGetRow操作由多個(gè)GetRow子操作組成,構(gòu)造子操作的過程與使用GetRow接口時(shí)相同。
批量讀取數(shù)據(jù)時(shí),您可以配置如下條件過濾所需數(shù)據(jù)。
一次請(qǐng)求中讀取多張表中的數(shù)據(jù)。
單次請(qǐng)求中支持讀取的最大行數(shù)為100行。
系統(tǒng)默認(rèn)返回所有列,您可以配置只返回指定列的數(shù)據(jù)。
批量讀取的所有行采用相同的參數(shù)條件,例如
ColumnsToGet=[colA]
,表示要讀取的所有行都只讀取colA列。使用過濾器獲取符合過濾條件的行數(shù)據(jù)。更多信息,請(qǐng)參見過濾器。
如果為數(shù)據(jù)表配置了數(shù)據(jù)多版本,則您可以配置最多讀取幾個(gè)版本數(shù)據(jù)、讀取指定時(shí)間范圍或者指定版本號(hào)的數(shù)據(jù)。關(guān)于數(shù)據(jù)版本的更多信息,請(qǐng)參見數(shù)據(jù)版本和生命周期。
BatchGetRow操作中的各個(gè)子操作獨(dú)立執(zhí)行,表格存儲(chǔ)會(huì)分別返回各個(gè)子操作的執(zhí)行結(jié)果。
范圍讀取數(shù)據(jù)
調(diào)用GetRange接口讀取一個(gè)范圍內(nèi)的數(shù)據(jù)。適用于能確定完整主鍵范圍或者主鍵前綴的場景。
表格存儲(chǔ)表中的行都是按照主鍵排序的,而主鍵是由全部主鍵列按照順序組成的,所以不能理解為表格存儲(chǔ)會(huì)按照某列主鍵排序,這是常見的誤區(qū)。
GetRange操作遵循最左匹配原則,讀取數(shù)據(jù)時(shí),依次比較第一主鍵列到第四主鍵列。例如表的主鍵包括PK1、PK2、PK3三個(gè)主鍵列,讀取數(shù)據(jù)時(shí),優(yōu)先比較PK1是否在開始主鍵與結(jié)束主鍵的范圍內(nèi),如果PK1在設(shè)置的主鍵范圍內(nèi),則不會(huì)再比較其他的主鍵,返回在PK1主鍵范圍內(nèi)的數(shù)據(jù);如果PK1在設(shè)置的主鍵邊界上,則繼續(xù)比較PK2是否在開始主鍵與結(jié)束主鍵的范圍內(nèi),以此類推。關(guān)于范圍查詢?cè)淼母嘈畔ⅲ?qǐng)參見GetRange范圍查詢?cè)斀?/a>。
范圍讀取數(shù)據(jù)時(shí),您可以配置如下條件過濾所需數(shù)據(jù)。
指定主鍵前綴后其他主鍵列使用虛擬點(diǎn)INF_MIN(無窮小)和INF_MAX(無窮大)讀取數(shù)據(jù),或者指定完整主鍵范圍讀取數(shù)據(jù)。
重要如果不能確定主鍵前綴,您也可以通過設(shè)置完整主鍵范圍均為虛擬點(diǎn)INF_MIN和INF_MAX進(jìn)行全表數(shù)據(jù)掃描,但是執(zhí)行此操作會(huì)消耗較多計(jì)算資源,請(qǐng)謹(jǐn)慎使用。
如果范圍較大,已掃描的行數(shù)或者數(shù)據(jù)量超過一定限制,會(huì)停止掃描,并返回已獲取的行和下一個(gè)主鍵信息。您可以根據(jù)返回的下一個(gè)主鍵信息,繼續(xù)發(fā)起請(qǐng)求,獲取范圍內(nèi)剩余的行。
GetRange操作可能在如下情況停止執(zhí)行并返回?cái)?shù)據(jù)。
掃描的行數(shù)據(jù)大小之和達(dá)到4 MB。
掃描的行數(shù)等于5000。
返回的行數(shù)等于最大返回行數(shù)。
當(dāng)前剩余的預(yù)留讀吞吐量已全部使用,余量不足以讀取下一條數(shù)據(jù)。
按照正序或者逆序讀取最多指定個(gè)數(shù)的行數(shù)據(jù),例如按照正序讀取最多5行數(shù)據(jù)。
系統(tǒng)默認(rèn)返回所有列,您可以配置只返回指定列的數(shù)據(jù)。
使用過濾器獲取符合過濾條件的行數(shù)據(jù)。更多信息,請(qǐng)參見過濾器。
范圍讀取的所有行采用相同的參數(shù)條件,例如
ColumnsToGet=[colA]
,表示要讀取的所有行都只讀取colA列。如果為數(shù)據(jù)表配置了數(shù)據(jù)多版本,則您可以配置最多讀取幾個(gè)版本數(shù)據(jù)、讀取指定時(shí)間范圍或者指定版本號(hào)的數(shù)據(jù)。關(guān)于數(shù)據(jù)版本的更多信息,請(qǐng)參見數(shù)據(jù)版本和生命周期。
當(dāng)使用GetRange掃描的數(shù)據(jù)量較大時(shí),表格存儲(chǔ)每次請(qǐng)求僅會(huì)掃描一次(行數(shù)大于5000或者大小大于4 MB停止掃描),超過限制的數(shù)據(jù)不會(huì)繼續(xù)返回,需要通過翻頁繼續(xù)獲取后面的數(shù)據(jù)。
使用方式
使用控制臺(tái)
您可以使用控制臺(tái)進(jìn)行單行查詢數(shù)據(jù)或范圍查詢數(shù)據(jù)。
在概覽頁面,單擊實(shí)例操作列的實(shí)例管理。
在實(shí)例詳情頁簽的數(shù)據(jù)表列表區(qū)域,單擊數(shù)據(jù)表操作列的查詢/搜索。
在數(shù)據(jù)管理頁簽,單擊查詢數(shù)據(jù),根據(jù)實(shí)際選擇單行讀取數(shù)據(jù)或者范圍讀取數(shù)據(jù)。
讀取單行數(shù)據(jù)
在查詢數(shù)據(jù)對(duì)話框,選擇查詢范圍為單行查詢,并選擇要查詢的表。
系統(tǒng)默認(rèn)返回所有列。如需顯示指定屬性列,請(qǐng)關(guān)閉獲取所有列并輸入需要返回的屬性列。
多個(gè)屬性列之間用半角逗號(hào)(,)隔開。
輸入目標(biāo)行的主鍵值。
主鍵值的完整性和準(zhǔn)確性均會(huì)影響查詢。
輸入最大版本數(shù),指定需要返回的版本數(shù)。
單擊確定。
范圍讀取數(shù)據(jù)
在查詢數(shù)據(jù)對(duì)話框,選擇查詢范圍為范圍查詢,并選擇要查詢的表。
系統(tǒng)默認(rèn)返回所有列。如需顯示指定屬性列,請(qǐng)關(guān)閉獲取所有列并輸入需要返回的屬性列。
多個(gè)屬性列之間用半角逗號(hào)(,)隔開。
輸入起始主鍵列和結(jié)束主鍵列。
范圍查詢優(yōu)先使用第一個(gè)主鍵值進(jìn)行查詢,當(dāng)設(shè)置的第一個(gè)主鍵值一致時(shí),系統(tǒng)會(huì)使用第二個(gè)主鍵值進(jìn)行查詢,其他主鍵的查詢規(guī)則同上。
讀取范圍是前開后閉的區(qū)間。
輸入最大版本數(shù),指定需要返回的版本數(shù)。
設(shè)置查詢結(jié)果的排序方向,可選正序查詢或逆序查詢。
單擊確定。
重要
使用命令行工具CLI
您可以使用命令行工具執(zhí)行如下命令讀取數(shù)據(jù)。
執(zhí)行
get
命令讀取單行數(shù)據(jù)。更多信息,請(qǐng)參見讀取數(shù)據(jù)。以下示例用于讀取第一主鍵列值為“86”,第二主鍵列值為6771的行數(shù)據(jù)。
get --pk '["86",6771]'
執(zhí)行
scan
命令范圍讀取數(shù)據(jù)。更多信息,請(qǐng)參見導(dǎo)出數(shù)據(jù)。以下示例用于逆序讀取
["86",7000]
到["86",6770]
主鍵范圍之間的行數(shù)據(jù),且只返回pid列。scan --begin '["86",7000]' --end '["86",6770]' --backward --columns pid
使用SDK
您可以使用Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK和PHP SDK讀取數(shù)據(jù)。此處以Java SDK為例介紹讀取數(shù)據(jù)的使用。
讀取單行數(shù)據(jù)
讀取數(shù)據(jù)時(shí),您可以指定要讀取的數(shù)據(jù)版本、要讀取的列、過濾器、正則過濾等。
讀取最新版本數(shù)據(jù)和指定列
以下示例用于讀取數(shù)據(jù)表中的一行數(shù)據(jù),設(shè)置讀取最新版本的數(shù)據(jù)和讀取指定的列。
private static void getRow(SyncClient client, String pkValue) { //構(gòu)造主鍵。 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue)); PrimaryKey primaryKey = primaryKeyBuilder.build(); //讀取一行數(shù)據(jù),設(shè)置數(shù)據(jù)表名稱。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey); //設(shè)置讀取最新版本。 criteria.setMaxVersions(1); GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria)); Row row = getRowResponse.getRow(); System.out.println("讀取完畢,結(jié)果為: "); System.out.println(row); //設(shè)置讀取某些列。 criteria.addColumnsToGet("Col0"); getRowResponse = client.getRow(new GetRowRequest(criteria)); row = getRowResponse.getRow(); System.out.println("讀取完畢,結(jié)果為:"); System.out.println(row); }
讀取數(shù)據(jù)時(shí)使用過濾器
以下示例用于讀取數(shù)據(jù)表中的一行數(shù)據(jù),設(shè)置讀取最新版本的數(shù)據(jù)以及根據(jù)Col0列的值過濾數(shù)據(jù)。
private static void getRow(SyncClient client, String pkValue) { //構(gòu)造主鍵。 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue)); PrimaryKey primaryKey = primaryKeyBuilder.build(); //讀取一行數(shù)據(jù),設(shè)置數(shù)據(jù)表名稱。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>", primaryKey); //設(shè)置讀取最新版本。 criteria.setMaxVersions(1); //設(shè)置過濾器,當(dāng)Col0列的值為0時(shí),返回該行。 SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0", SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0)); //如果Col0列不存在,則不返回該行。 singleColumnValueFilter.setPassIfMissing(false); criteria.setFilter(singleColumnValueFilter); GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria)); Row row = getRowResponse.getRow(); System.out.println("讀取完畢,結(jié)果為: "); System.out.println(row); }
讀取數(shù)據(jù)時(shí)使用正則過濾
以下示例用于讀取數(shù)據(jù)表一行中Col1列的數(shù)據(jù),并對(duì)該列的數(shù)據(jù)執(zhí)行正則過濾。
private static void getRow(SyncClient client, String pkValue) { //設(shè)置數(shù)據(jù)表名稱。 SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("<TABLE_NAME>"); //構(gòu)造主鍵。 PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(pkValue)) .build(); criteria.setPrimaryKey(primaryKey); // 設(shè)置讀取最新版本。 criteria.setMaxVersions(1); // 設(shè)置過濾器,當(dāng)cast<int>(regex(Col1)) > 100時(shí),返回該行。 RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER); SingleColumnValueRegexFilter filter = new SingleColumnValueRegexFilter("Col1", regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN, ColumnValue.fromLong(100)); criteria.setFilter(filter); GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria)); Row row = getRowResponse.getRow(); System.out.println("讀取完畢,結(jié)果為: "); System.out.println(row); }
批量讀取數(shù)據(jù)
以下示例用于讀取10行,設(shè)置版本條件、要讀取的列、過濾器等。
private static void batchGetRow(SyncClient client) {
//設(shè)置數(shù)據(jù)表名稱。
MultiRowQueryCriteria multiRowQueryCriteria = new MultiRowQueryCriteria("<TABLE_NAME>");
//加入10個(gè)要讀取的行。
for (int i = 0; i < 10; i++) {
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("pk" + i));
PrimaryKey primaryKey = primaryKeyBuilder.build();
multiRowQueryCriteria.addRow(primaryKey);
}
//添加條件。
multiRowQueryCriteria.setMaxVersions(1);
multiRowQueryCriteria.addColumnsToGet("Col0");
multiRowQueryCriteria.addColumnsToGet("Col1");
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("Col0",
SingleColumnValueFilter.CompareOperator.EQUAL, ColumnValue.fromLong(0));
singleColumnValueFilter.setPassIfMissing(false);
multiRowQueryCriteria.setFilter(singleColumnValueFilter);
BatchGetRowRequest batchGetRowRequest = new BatchGetRowRequest();
//BatchGetRow支持讀取多個(gè)表的數(shù)據(jù),一個(gè)multiRowQueryCriteria對(duì)應(yīng)一個(gè)表的查詢條件,可以添加多個(gè)multiRowQueryCriteria。
batchGetRowRequest.addMultiRowQueryCriteria(multiRowQueryCriteria);
BatchGetRowResponse batchGetRowResponse = client.batchGetRow(batchGetRowRequest);
System.out.println("是否全部成功:" + batchGetRowResponse.isAllSucceed());
System.out.println("讀取完畢,結(jié)果為: ");
for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getSucceedRows()) {
System.out.println(rowResult.getRow());
}
if (!batchGetRowResponse.isAllSucceed()) {
for (BatchGetRowResponse.RowResult rowResult : batchGetRowResponse.getFailedRows()) {
System.out.println("失敗的行:" + batchGetRowRequest.getPrimaryKey(rowResult.getTableName(), rowResult.getIndex()));
System.out.println("失敗原因:" + rowResult.getError());
}
/**
* 可以通過createRequestForRetry方法再構(gòu)造一個(gè)請(qǐng)求對(duì)失敗的行進(jìn)行重試。此處只給出構(gòu)造重試請(qǐng)求的部分。
* 推薦的重試方法是使用SDK的自定義重試策略功能,支持對(duì)batch操作的部分行錯(cuò)誤進(jìn)行重試。設(shè)置重試策略后,調(diào)用接口處無需增加重試代碼。
*/
BatchGetRowRequest retryRequest = batchGetRowRequest.createRequestForRetry(batchGetRowResponse.getFailedRows());
}
}
范圍讀取數(shù)據(jù)
按照確定范圍讀取數(shù)據(jù)
以下示例用于按照確定范圍進(jìn)行正序讀取,判斷nextStartPrimaryKey是否為空,讀取完范圍內(nèi)的全部數(shù)據(jù)。
private static void getRange(SyncClient client, String startPkValue, String endPkValue) { //設(shè)置數(shù)據(jù)表名稱。 RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>"); //設(shè)置起始主鍵。 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(startPkValue)); rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); //設(shè)置結(jié)束主鍵。 primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString(endPkValue)); rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build()); rangeRowQueryCriteria.setMaxVersions(1); System.out.println("GetRange的結(jié)果為:"); while (true) { GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria)); for (Row row : getRangeResponse.getRows()) { System.out.println(row); } //如果NextStartPrimaryKey不為null,則繼續(xù)讀取。 if (getRangeResponse.getNextStartPrimaryKey() != null) { rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey()); } else { break; } } }
按照第一個(gè)主鍵列確定范圍讀取數(shù)據(jù)
以下示例用于按照第一個(gè)主鍵列確定范圍、第二主鍵列從最小值(INF_MIN)到最大值(INF_MAX)進(jìn)行正序讀取,判斷nextStartPrimaryKey是否為null,讀取完范圍內(nèi)的全部數(shù)據(jù)。
private static void getRange(SyncClient client, String startPkValue, String endPkValue) { //設(shè)置數(shù)據(jù)表名稱。 RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria("<TABLE_NAME>"); //設(shè)置起始主鍵,以兩個(gè)主鍵為例。 PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(startPkValue));//確定值。 primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MIN);//最小值。 rangeRowQueryCriteria.setInclusiveStartPrimaryKey(primaryKeyBuilder.build()); //設(shè)置結(jié)束主鍵。 primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder(); primaryKeyBuilder.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromString(endPkValue));//確定值。 primaryKeyBuilder.addPrimaryKeyColumn("pk2", PrimaryKeyValue.INF_MAX);//最大值。 rangeRowQueryCriteria.setExclusiveEndPrimaryKey(primaryKeyBuilder.build()); rangeRowQueryCriteria.setMaxVersions(1); System.out.println("GetRange的結(jié)果為:"); while (true) { GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria)); for (Row row : getRangeResponse.getRows()) { System.out.println(row); } //如果nextStartPrimaryKey不為null,則繼續(xù)讀取。 if (getRangeResponse.getNextStartPrimaryKey() != null) { rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey()); } else { break; } } }
按照確定范圍讀取數(shù)據(jù)并對(duì)指定列使用正則過濾
以下示例用于讀取主鍵范圍為
["pk:2020-01-01.log", "pk:2021-01-01.log")
時(shí)Col1列的數(shù)據(jù),并對(duì)該列的數(shù)據(jù)執(zhí)行正則過濾。private static void getRange(SyncClient client) { //設(shè)置數(shù)據(jù)表名稱。 RangeRowQueryCriteria criteria = new RangeRowQueryCriteria("<TABLE_NAME>"); //設(shè)置主鍵范圍為["pk:2020-01-01.log", "pk:2021-01-01.log"),讀取范圍為左閉右開的區(qū)間。 PrimaryKey pk0 = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2020-01-01.log")) .build(); PrimaryKey pk1 = PrimaryKeyBuilder.createPrimaryKeyBuilder() .addPrimaryKeyColumn("pk", PrimaryKeyValue.fromString("2021-01-01.log")) .build(); criteria.setInclusiveStartPrimaryKey(pk0); criteria.setExclusiveEndPrimaryKey(pk1); //設(shè)置讀取最新版本。 criteria.setMaxVersions(1); //設(shè)置過濾器,當(dāng)cast<int>(regex(Col1)) > 100時(shí),返回該行。 RegexRule regexRule = new RegexRule("t1:([0-9]+),", RegexRule.CastType.VT_INTEGER); SingleColumnValueRegexFilter filter = new SingleColumnValueRegexFilter("Col1", regexRule,SingleColumnValueRegexFilter.CompareOperator.GREATER_THAN,ColumnValue.fromLong(100)); criteria.setFilter(filter); while (true) { GetRangeResponse resp = client.getRange(new GetRangeRequest(criteria)); for (Row row : resp.getRows()) { // do something System.out.println(row); } if (resp.getNextStartPrimaryKey() != null) { criteria.setInclusiveStartPrimaryKey(resp.getNextStartPrimaryKey()); } else { break; } } }
計(jì)費(fèi)說明
表格存儲(chǔ)包括VCU模式(原預(yù)留模式)和CU模式(原按量模式)兩種計(jì)費(fèi)模式。使用不同的計(jì)費(fèi)模式時(shí),計(jì)算部分的計(jì)費(fèi)方式不同。
計(jì)費(fèi)模式 | 計(jì)算部分的計(jì)費(fèi)說明 |
以包年包月方式預(yù)先購買計(jì)算能力。計(jì)算能力中涵蓋數(shù)據(jù)讀的計(jì)算消耗。 | |
根據(jù)實(shí)際計(jì)算消耗折算成CU進(jìn)行計(jì)費(fèi)。同時(shí)根據(jù)實(shí)例類型不同,計(jì)費(fèi)時(shí)需要區(qū)分按量讀寫CU以及預(yù)留讀寫CU。 讀取數(shù)據(jù)時(shí)不消耗寫CU,消耗的讀CU計(jì)算規(guī)則如下:
|