- ACID 事物
- 隔离级别和传播性
- 隔离级别
- 传播性
- 事务-线程绑定
- 使用事物
- 建立事物型KitDB
- 使用事物
- 事物中的禁止操作
- Collection的delete方法
- K-V的delPrefix方法
- 死锁
- 目前事物存在的问题
- 读性能
ACID 事物
KitDB的事物是ACID事物。隔离级别和传播性
隔离级别
KitDB的隔离级别为Read Committed(读已提交)。KitDB未实现其他级别事物。传播性
KitDB的事物传播性为PROPAGATION_REQUIRED:如果没有,就新建一个事务;如果有,就加入当前事务。KitDB未实现其他传播性。事务-线程绑定
为了降低事物的使用复杂度,类似于Spring的食物管理方式,KitDB实现了事物和当前线程绑定。单个事物的生命周期只能限制在本线程中。
使用事物
建立事物型KitDB
普通类型KitDB不支持事物,必须建立专门的事物型KitDB
DB db = DB.buildTransactionDB("/data/kitdb/",true);
使用事物
// 启动一个事物KitDB实例DB db = DB.buildTransactionDB("/data/kitdb/",true);ZSet zSet = db.getzSet();RMap rmap = db.getMap();try { //开启事物,获取事物等待最长时间5000毫秒 db.startTran(5000); //操作ZSet zSet.add("test","hello world".getBytes(),System.currentTimeMillis()); //操作Map rmap.put("test","hello","world".getBytes()); //提交事物 db.commitTX();} catch (Exception e) { //事物回滚 db.rollbackTX();}
事物必须被提交或回滚!!!尽量减少事物的执行时间
事物中的禁止操作
Collection的delete方法
事物中无法调用delete直接删除整个 Collection。但可以调用fastDelete,删除这个Collection。其他Collection内元素的删除和移除操作不受影响
K-V的delPrefix方法
事物中无法调用K-V的delPrefix方法。如果需要,只能在事物外调用,或者使用其他方式实现。
死锁
在并行的多个事物中,必须小心死锁。KitDB并没有死锁检测机制,而由于key锁的机制,死锁又相对容易产生。当进行 AB BA 两个并行事物时,非常有可能产生死锁。避免死锁又多种办法:
- -
目前事物存在的问题
读性能
优化建议)
