【技术实现步骤摘要】
一种基于CockroachDB的BatchGroup串行化调用的优化方法
[0001]本专利技术涉及数据库领域,尤其涉及一种基于CockroachDB的BatchGroup串行化调用的优化方法。
技术介绍
[0002]CockroachDB是一个可水平伸缩、支持事务的ACID特性的分布式数据库,它主要有SQL层、事务层、分发层、副本层和存储层等组成。其中副本层调用存储层的写接口时,是把数据存放在了Batch中,多个Batch依次放入一个FIFO的队列中,队列头的Batch作为leader,组建自己的BatchGroup。BatchGroup间因为存在顺序依赖关系,所以Group调用存储层写接口采用串行的方式。存储层会维护一个全局递增的Sequence,用户的数据在插入时,与当前Sequence绑定一起存储到内存或磁盘上,先插入的数据Sequence越小。在进行读数据时,只有小于等于存储层当前的Sequence的数据才可见。我们可以看出,因为BatchGroup间存在顺序依赖关系,所以BatchGroup必须串行执行,这将成为 ...
【技术保护点】
【技术特征摘要】
1.一种基于CockroachDB的BatchGroup串行化调用的优化方法,其特征在于,通过把存储层的Sequence上提到Go层,写数据时为每个BatchGroup预分配全局递增的Sequence号,读数据时带上当前的Sequence到存储层,从而实现BatchGroup的并发写入。2.根据权利要求1所述的方法,其特征在于,BatchGroup调用CGO执行写操作时,Go层通过维护全局变量Sequence,为每个BatchGroup依次分配Sequence段,解除其顺序耦合关系,实现BatchGroup的并发调用。3.根据权利要求2所述的方法,其特征在于,工作步骤如下:1)每个写协程把数据写入Batch之中,Commit后加入pending队列;队列的第一个Batch作为Leader确定一个BatchGroup,组内的其他Batch数据合并到Leader中,由Leader代提交;2)维护一个全局递增Sequence,代表数据写入的顺序;3)在Leader进行CGO调用前,计算Batch内写操作的数量count,然后为其预分配[Sequence+1,Sequence+count]序列号段,同时更新Sequence为Sequence+count,序列号代表数据写入的相对顺序;4)在读取时,NewIter返回一个存储层迭代器,若IterOption的sequence字段为空,则代表不是快照查询,则用当前的Sequence进行赋值,代表只可看到小于等于Sequence的数据。4.根据权利要求3所述的方法,其特征在于,维护一个信号量Semophere,用于控制BatchGroup并发的数量,调用Semophere的acquire()方法,若未到并发阈值,则返回,否则一直阻塞,直到其中一个BatchGroup执行完毕后release()资源。5.根...
【专利技术属性】
技术研发人员:王云龙,
申请(专利权)人:山东浪潮科学研究院有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。