Tablestore SDK for Java, satır düzeyinde bir tamsayı nitelik sütununu atomik olarak artırabilir veya azaltabilir ve güncellenen değeri aynı istekte döndürebilir.
Ön koşullar
Tablestore SDK for Java paketini yükleyin ve istemciyi başlatın.
Açıklama
Belirtilen tamsayı sütununu atomik olarak güncellemek için increment(Column) yöntemini çağırın. Pozitif değer sütunu artırır, negatif değer ise azaltır. Tablestore, satır düzeyinde atomikliği garanti eder ve güncellemeden sonra yeni bir veri sürümü yazar. Güncellenen değeri aynı istekte döndürmek için addReturnColumn(String) yöntemini çağırın ve returnType parametresini RT_AFTER_MODIFY olarak ayarlayın.
public UpdateRowResponse updateRow(UpdateRowRequest updateRowRequest) throws TableStoreException, ClientException
public RowUpdateChange increment(Column column)
public void addReturnColumn(String columnName)
public void setReturnType(ReturnType returnType)
Aşağıdaki örnekte, counter_demo tablosundaki birincil anahtarı pk0 olan satırın price sütunu 10 artırılır ve güncellenen değer aynı istekte okunur.
PrimaryKey primaryKey = PrimaryKeyBuilder.createPrimaryKeyBuilder()
.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("pk0"))
.build();
RowUpdateChange rowUpdateChange = new RowUpdateChange("counter_demo", primaryKey);
// Increment the price column by 10 (use a negative value to decrement)
rowUpdateChange.increment(new Column("price", ColumnValue.fromLong(10)));
// Return the updated column value in the same request
rowUpdateChange.addReturnColumn("price");
rowUpdateChange.setReturnType(ReturnType.RT_AFTER_MODIFY);
UpdateRowResponse response = client.updateRow(new UpdateRowRequest(rowUpdateChange));
Row row = response.getRow();
System.out.println("Updated price: " + row.getLatestColumn("price").getValue().asLong());
Parametreler
İstek yapılandırması
UpdateRowRequest aşağıdaki parametreleri içerir.
|
|
|
|
|
|
|
|
|
|
|
Yerel işlem ID'si. Bu parametreyi yalnızca atomik sayaç işlemini yerel bir işlem içinde gerçekleştirirken belirtin. ID'yi nasıl alacağınız ve kullanacağınız hakkında bilgi için bkz. Yerel işlemleri kullanma. |
Satır güncelleme yapılandırması
UpdateRowRequest öğesinin rowChange parametresi RowUpdateChange türündedir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Koşullu güncelleme yapılandırması. Atomik sayaç işlemi yalnızca satır koşulu karşıladığında gerçekleştirilir. Koşulun nasıl yapılandırılacağı hakkında bilgi için bkz. Koşullu güncellemeleri kullanma. |
|
|
|
|
|
|
|
|
Sayaç sütunu
increment() yöntemiyle UpdateRowRequest.rowChange.columnsToUpdate listesine eklenen her öğe bir Column içerir.
|
|
|
|
|
|
|
|
|
|
|
|
Yanıt
|
|
|
|
|
|
|
|
Sınırlamalar
Atomik sayaç işlemleri yalnızca tamsayı sütunlarını destekler. Sütun varsa ancak bir tamsayı sütunu değilse işlem
OTSParameterInvalidhatasını döndürür.Atomik sayaç işlemleri yalnızca en son sürüm için geçerlidir ve kullanıcı tarafından belirtilen bir zaman damgasını kabul etmez.
Tek bir güncelleme isteği içinde aynı sütun üzerinde atomik sayaç işlemini üzerine yazma veya silme gibi diğer işlemlerle birleştiremezsiniz.
Bir
BatchWriteRowisteğinde, atomik sayaç işlemi içeren bir satır yalnızca bir kez görünebilir.
Atomik sayaç işlemleri ağ zaman aşımları veya sistem hataları nedeniyle başarısız olabilir. Yeniden deneme, artışı iki kez uygulayarak sayacın beklenenden daha yüksek (veya daha düşük) olmasına neden olabilir. Çift sayımı önlemek için değeri mevcut durumuna göre güncellemek amacıyla koşullu güncelleme kullanın.