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

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

attachments-2021-06-NgXmo2D760c81a08e0370.jpeg

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)
} 
请先 登录 后评论

1 个回答

logger

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

请先 登录 后评论