| Interface | Description |
|---|---|
| AsyncClientInterface | |
| AsyncTimeseriesClientInterface | |
| PrepareCallback | |
| RequestTracer | |
| SyncClientInterface |
阿里云表格存储(TableStore, 原OTS)的访问接口。
|
| TableStoreCallback<Request,Response> | |
| TableStoreReader | |
| TableStoreTimeseriesWriter | |
| TableStoreWriter |
TableStore提供了BatchWriteRow接口让用户能够向TableStore批量导入数据,但是在实际使用过程中,BatchWriteRow接口的使用方式对开发者并不友好。例如用户
需要自己计算并控制一次BatchWriteRow的数据量大小,需要关注行大小或者列大小是否超过TableStore的限制,需要对主键去重以及处理单行错误的重试等等。
TableStoreWriter旨在针对批量数据导入的场景提供一个更加易用的接口,但是不是所有场景均适用TableStoreWriter,在使用之前,请详细了解它的行为,否则会造成数据正确性的问题:
- TableStoreWriter所有接口保证线程安全。
- 调用
TableStoreWriter.addRowChange(com.alicloud.openservices.tablestore.model.RowChange)接口向TableStoreWriter写入一行返回后,并不代表该行已经写入TableStore,该行会保存在TableStoreWriter的本地缓冲中,等待flush,flush成功后该行才会被写入TableStore。
- 向TableStoreWriter写入的行的顺序与最终写入TableStore的行的顺序不保证一致。
- 所有通过TableStoreWriter的写入操作,需要使用者保证是幂等的,因为TableStoreWriter内部默认会启用重试,某一行可能会多次写入。
- TableStoreWriter对缓冲区的flush时机由两个因素来控制:一个是flushInterval,根据时间定期的进行flush;
另一个是WriterConfig.maxBatchSize,根据缓冲区的数据量来决定是否需要flush。
- TableStoreWriter在写入数据时,会自动对导入失败的行进行重试,但是并不保证所有行重试后最终一定能够被写入成功(例如:某一行在写入时加了存在性检查,若已经存在,则永远写不成功)。
此时经过若干次重试后若还有数据无法被写入成功,则这些行会被认为是脏数据,脏数据会通过TableStoreCallback反馈给使用者。
- 再向TableStoreWriter写入数据之前,请先注册好Callback,否则若在注册CallBack之前已经有数据写入失败,则失败的行会直接被抛弃。
- 程序退出前,需要显式调用TableStoreWriter.flush()或TableStoreWriter.close(),将还存在缓冲区中的数据进行flush,否则会造成这部分数据丢失。
TableStoreWriter对批量导入数据的处理流程:
1. |
| TimeseriesClientInterface | |
| TunnelClientInterface |
| Exception | Description |
|---|---|
| ClientException |
ClientException 发生在请求的返回结果无效或遇到网络异常。 |
| PartialResultFailedException | |
| TableStoreException |
TableStoreException 表示TableStore返回的异常。 |
Copyright © 2024. All Rights Reserved.