• ACID 事物
  • 隔离级别和传播性
  • 隔离级别
  • 传播性
  • 事务-线程绑定
  • 使用事物
  • 建立事物型KitDB
  • 使用事物
  • 事物中的禁止操作
  • Collection的delete方法
  • K-V的delPrefix方法
  • 死锁
  • 目前事物存在的问题
  • 读性能

    ACID 事物

    KitDB的事物是ACID事物。

    隔离级别和传播性

    隔离级别

    KitDB的隔离级别为Read Committed(读已提交)。KitDB未实现其他级别事物。

    传播性

    KitDB的事物传播性为PROPAGATION_REQUIRED:如果没有,就新建一个事务;如果有,就加入当前事务。KitDB未实现其他传播性。

    事务-线程绑定

    为了降低事物的使用复杂度,类似于Spring的食物管理方式,KitDB实现了事物和当前线程绑定。

    单个事物的生命周期只能限制在本线程中。

    使用事物

    建立事物型KitDB

    普通类型KitDB不支持事物,必须建立专门的事物型KitDB

    1. DB db = DB.buildTransactionDB("/data/kitdb/",true);

    使用事物

    1. // 启动一个事物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 两个并行事物时,非常有可能产生死锁。避免死锁又多种办法:

  • -

    目前事物存在的问题

    读性能

    优化建议)