多线程写入分布式表时提示filePath has been owned by transaction 52053

我用三个线程并发往DolphinDB分布式表写入时,三个批处理作业有2个出现如下图所示错误,请问是什么原因?

multithread_20200801160114.jpg

我的写入代码如下,其中分布式数据库是按天值分区:

def WriteDate(st, days){
    startDate = st
    iteration = 100
    startTime = startDate.datetime()
    t = database("dfs://forwardtekDdb1").loadTable("windTurbine")
    for(d in 0:days){
        for(its in 0:864){
            records = iteration
            tt = table(take(startTime + ((its*iteration)..(its*iteration+iteration - 1)), records) as ts)
            m = "tag" + format(1..63510, "000")
            for (i in 0: 73) {
                for (j in (i*870): (i*870+870)){
                    if (j < 18+i*870)
                        tt[m[j]] = 20 + rand(10.0, records)
                    else if (j == 869+i*870)
                        tt[m[j]] = take(1.0, records)
                    else{
                        tt[m[j]] = take(0.0, records)
                    }
                }
            }
            
            t.append!(tt)       
        }
        startTime=datetimeAdd(startTime,1,`d)
    }
}
startDate = {startDate}
days = {days}
threads = {threads}
for(i in 0:threads){
    submitJob("submit_write_dfs", "write data "+i, WriteDate,startDate,days)
} 
阅读 142
评论
    1 个回答
    • 1.7k

    这是因为多个批处理作业并发往同个分区写入数据了。
    在DolphinDB database中,同一个分区不能被多个writer并发写入,当一个分区被某一个事务A锁定之后,另一个事务B试图再次去锁定这个分区时,系统立刻会抛出异常导致事务B失败回滚。详见https://github.com/dolphindb/...

      撰写回答

      登录后参与交流、获取后续更新提醒