write operation的定义:指对一个tablet进行insert或update或delete。在完成后由系统自动进行commit。一个tablet上的一个write operation完成后,才能进行下一个write operation
Kudu采用MVCC多版本并发控制和Raft一致性算法,write流程如下:
write transaction指对一个或多个tablet的多个write operation同时进行操作,每个事务都有一个事务ID。事务由用户手动进行commit,commit方式为两阶段提交
在一个批次写入多行数据到一个或多个tablet,会先将一个批次的数据缓存到内存,然后flush到server端。一个batch具有相同的timestamp
一个事务中的待change的多个rows也会进行lock。当一个row被一个事务lock,其它事务操作该row需等待lock释放
事务通过类KuduTransaction实现
scan读取的是snapshot的数据,不会阻塞write
部分可选参数示例代码如下:
val scanner: KuduScanner = client.newScannerBuilder(table)
// ...... 其它参数
.readMode(AsyncKuduScanner.ReadMode.READ_AT_SNAPSHOT)
.snapshotTimestampMicros(System.currentTimeMillis() * 1000)
.replicaSelection(ReplicaSelection.CLOSEST_REPLICA)
.build()
ReadMode可选值如下:
snapshotTimestampMicros(System.currentTimeMillis() * 1000)进行指定。如果此时还有write的timestamp小于指定的snapshot,则会等待write完成,再返回数据ReplicaSelection的选择不影响数据一致性,可选值如下: