public class DefaultTableStoreWriter extends Object implements TableStoreWriter
构造器和说明 |
---|
DefaultTableStoreWriter(AsyncClientInterface ots,
String tableName,
WriterConfig config,
TableStoreCallback<RowChange,ConsumedCapacity> callback,
Executor executor) |
限定符和类型 | 方法和说明 |
---|---|
void |
addRowChange(List<RowChange> rowChanges,
List<RowChange> dirtyRows)
向本地缓冲区批量写入行。
|
void |
addRowChange(RowChange rowChange)
向本地缓冲区增加一行数据。
|
boolean |
addRowChangeInternal(RowChange rowChange) |
void |
close()
关闭TableStoreWriter,在关闭之前,会先flush掉缓冲区内的所有数据。
|
void |
flush()
主动flush缓冲区中的数据,该函数会等待缓冲区中的所有数据被flush完毕。
|
TableStoreCallback<RowChange,ConsumedCapacity> |
getCallback() |
TableStoreCallback<RowChange,RowWriteResult> |
getResultCallback()
获取设置的Callback。
|
WriterConfig |
getWriterConfig()
获取限制项配置。
|
WriterStatistics |
getWriterStatistics()
获取数据导入期间的统计信息。
|
void |
setCallback(TableStoreCallback<RowChange,ConsumedCapacity> callback) |
void |
setResultCallback(TableStoreCallback<RowChange,RowWriteResult> resultCallback)
设置Callback,数据写入成功或者失败均会通过Callback来反馈。
|
void |
startFlushTimer(int flushInterval) |
boolean |
tryAddRowChange(RowChange rowChange)
Same with
TableStoreWriter.addRowChange(RowChange) , but it won't be blocked if the buffer is full. |
public DefaultTableStoreWriter(AsyncClientInterface ots, String tableName, WriterConfig config, TableStoreCallback<RowChange,ConsumedCapacity> callback, Executor executor)
public void startFlushTimer(int flushInterval)
public void addRowChange(RowChange rowChange)
TableStoreWriter
WriterConfig.maxPKColumnSize
和WriterConfig.maxAttrColumnSize
。
- 该行的属性列的个数是否超过WriterConfig.maxColumnsCount
。
- 该行的大小是否超过WriterConfig.maxBatchSize
。
- 属性列中是否有列名与主键列相同。
若在写入缓冲区之前被判定为脏数据,该部分数据不会触发CallBack的调用。
以上检查会在SDK端带来额外的CPU消耗,但是这些检查是必要的,为了减少不必要的RPC开销,以及避免脏数据污染同一批次Batch写入的行。
注意:若缓冲区满,则该操作会被block。
若判断该行为脏数据,该接口会抛出ClientException
。addRowChange
在接口中 TableStoreWriter
rowChange
- 要写入的行public boolean tryAddRowChange(RowChange rowChange)
TableStoreWriter
TableStoreWriter.addRowChange(RowChange)
, but it won't be blocked if the buffer is full.tryAddRowChange
在接口中 TableStoreWriter
public boolean addRowChangeInternal(RowChange rowChange)
public void addRowChange(List<RowChange> rowChanges, List<RowChange> dirtyRows) throws ClientException
TableStoreWriter
TableStoreWriter.addRowChange(RowChange)
一样的检查,若批量写入的行中存在脏数据,则该函数会抛ClientException
,
且所有的脏数据会写入dirtyRows。addRowChange
在接口中 TableStoreWriter
rowChanges
- 批量写入的行dirtyRows
- 用于传出脏数据的列表ClientException
- 若存在脏数据public void setCallback(TableStoreCallback<RowChange,ConsumedCapacity> callback)
public void setResultCallback(TableStoreCallback<RowChange,RowWriteResult> resultCallback)
TableStoreWriter
AsyncClientInterface
中每个接口的Callback不同,其callback会与每个请求一一对应,且可以是独立的。
但是这里的Callback是与RowChange对应,且所有RowChange都共享该callback。setResultCallback
在接口中 TableStoreWriter
public TableStoreCallback<RowChange,ConsumedCapacity> getCallback()
getCallback
在接口中 TableStoreWriter
TableStoreWriter.getResultCallback()
public TableStoreCallback<RowChange,RowWriteResult> getResultCallback()
TableStoreWriter
getResultCallback
在接口中 TableStoreWriter
public WriterConfig getWriterConfig()
TableStoreWriter
getWriterConfig
在接口中 TableStoreWriter
public WriterStatistics getWriterStatistics()
TableStoreWriter
getWriterStatistics
在接口中 TableStoreWriter
public void flush() throws ClientException
TableStoreWriter
flush
在接口中 TableStoreWriter
ClientException
public void close()
TableStoreWriter
TableStoreWriter.addRowChange(com.alicloud.openservices.tablestore.model.RowChange)
向缓冲区写入数据,则该部分数据不保证会写入TableStore。
addRowChange和close两个操作之间的互斥由调用方来保证,请务必保证在调用close之前,没有任何其他线程会继续使用该writer,否则会有预期外的行为。close
在接口中 TableStoreWriter
Copyright © 2018. All Rights Reserved.