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

发布于 2022-09-12 03:59:32 字数 1307 浏览 18 评论 0

我用三个线程并发往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)
} 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

意犹 2022-09-19 03:59:32

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文