日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

原子計(jì)數(shù)器

如果要在某些在線應(yīng)用中快速進(jìn)行計(jì)數(shù)操作,您可以使用原子計(jì)數(shù)器實(shí)現(xiàn)。使用原子計(jì)數(shù)器時(shí),您需要將表中的某一列當(dāng)成一個(gè)原子計(jì)數(shù)器,然后對該列進(jìn)行原子計(jì)數(shù)操作。

場景

原子計(jì)數(shù)器適用于需要快速進(jìn)行計(jì)數(shù)操作的場景,例如在某些在線應(yīng)用中實(shí)現(xiàn)統(tǒng)計(jì)帖子的PV(實(shí)時(shí)瀏覽量)、消息計(jì)數(shù)等功能。

功能概述

原子計(jì)數(shù)器可以解決由強(qiáng)一致性導(dǎo)致的寫入性能開銷的問題。一個(gè)RMW(Read-Modify-Write)操作,通過一次網(wǎng)絡(luò)請求發(fā)送到服務(wù)器端,服務(wù)器端使用內(nèi)部行鎖機(jī)制在本地完成RMW的操作。通過原子計(jì)數(shù)器將分布式計(jì)算器的計(jì)算邏輯下推到服務(wù)器端,在保證強(qiáng)一致性的情況下,提升原子計(jì)數(shù)器的寫入性能。

重要

原子計(jì)數(shù)操作可能會由于網(wǎng)絡(luò)超時(shí)、系統(tǒng)錯誤等導(dǎo)致失敗。此時(shí)只需重試操作即可,但是可能會更新兩次原子計(jì)數(shù)器,導(dǎo)致原子計(jì)數(shù)器偏多或偏少。針對此類異常場景,建議使用條件更新精確變更列值。

使用原子計(jì)數(shù)器功能,您可以對某一行中的數(shù)據(jù)做實(shí)時(shí)統(tǒng)計(jì)。為了實(shí)現(xiàn)原子計(jì)數(shù)器功能,表格存儲UpdateRow接口中新增了原子計(jì)數(shù)器的相關(guān)操作,例如對列執(zhí)行增量變更、返回進(jìn)行原子計(jì)數(shù)操作后的列值。

假設(shè)您需要使用表格存儲來存儲圖片元信息并統(tǒng)計(jì)圖片數(shù)信息,數(shù)據(jù)表內(nèi)每一行對應(yīng)某一個(gè)用戶ID,行上的其中一列用于存儲上傳的圖片,另一列用于實(shí)時(shí)統(tǒng)計(jì)上傳的圖片數(shù)。

  • 使用UpdateRow接口增加一張新圖片時(shí),原子計(jì)數(shù)器+1。

  • 使用UpdateRow接口刪除一張舊圖片時(shí),原子計(jì)數(shù)器-1。

  • 使用GetRow接口讀取原子計(jì)數(shù)器的值,獲取當(dāng)前用戶的圖片數(shù)。

上述行為具有強(qiáng)一致性,即當(dāng)增加一張新圖片時(shí),原子計(jì)數(shù)器會相應(yīng)+1,而不會出現(xiàn)-1的情況。

注意事項(xiàng)

  • 只支持對整型列的列值進(jìn)行原子計(jì)數(shù)操作。

  • 作為原子計(jì)數(shù)器的列,如果寫入數(shù)據(jù)前該列不存在,則默認(rèn)值為0;如果寫入數(shù)據(jù)前該列已存在且列值非整型,則產(chǎn)生OTSParameterInvalid錯誤。

  • 增量值可以是正數(shù)或負(fù)數(shù),但不能出現(xiàn)計(jì)算溢出。如果出現(xiàn)計(jì)算溢出,則產(chǎn)生OTSParameterInvalid錯誤。

  • 默認(rèn)不返回進(jìn)行原子計(jì)數(shù)操作的列值,您可以通過相應(yīng)操作指定返回進(jìn)行原子計(jì)數(shù)操作的列值。

  • 在單次更新請求中,不能對某一列同時(shí)進(jìn)行更新和原子計(jì)數(shù)操作。假設(shè)列A已經(jīng)執(zhí)行原子計(jì)數(shù)操作,則列A不能再執(zhí)行其他操作(例如列的覆蓋寫,列刪除等)。

  • 在一次BatchWriteRow請求中,支持對同一行數(shù)據(jù)進(jìn)行多次更新操作。但是如果某一行已進(jìn)行原子計(jì)數(shù)操作,則該行在此批量請求中只能出現(xiàn)一次。

  • 原子計(jì)數(shù)操作只能作用在列值的最新版本,不支持對列值的特定版本做原子計(jì)數(shù)操作。更新完成后,原子計(jì)數(shù)操作會插入一個(gè)新的數(shù)據(jù)版本。

使用方式

重要

只支持通過SDK方式使用原子計(jì)數(shù)器功能。

您可以通過Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK使用原子計(jì)數(shù)器功能。此處以Java SDK為例介紹原子計(jì)數(shù)器功能的使用。

寫入數(shù)據(jù)時(shí),使用rowUpdateChange接口對整型列做列值的增量變更,然后讀取更新后的新值。

private static void incrementByUpdateRowApi(SyncClient client) {
    //構(gòu)造主鍵。
    PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
    primaryKeyBuilder.addPrimaryKeyColumn("<PRIMARY_KEY_NAME>", PrimaryKeyValue.fromString("pk0"));
    PrimaryKey primaryKey = primaryKeyBuilder.build();
    //設(shè)置數(shù)據(jù)表名稱。
    RowUpdateChange rowUpdateChange = new RowUpdateChange("<TABLE_NAME>", primaryKey); 

    //將進(jìn)行原子計(jì)數(shù)操作的price列的列值+10,不能設(shè)置時(shí)間戳。
    rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));

    //設(shè)置returnType為ReturnType.RT_AFTER_MODIFY,將進(jìn)行原子計(jì)數(shù)操作的列值返回。
    rowUpdateChange.addReturnColumn("price");
    rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);

    //對price列進(jìn)行原子計(jì)數(shù)操作。
    UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));

    //打印更新后的新值。
    Row row = response.getRow();
    System.out.println(row);
}

計(jì)費(fèi)說明

使用原子計(jì)數(shù)器功能不影響現(xiàn)有計(jì)費(fèi)規(guī)則。關(guān)于計(jì)費(fèi)的更多信息,請參見計(jì)費(fèi)概述