问答

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

作者:admin 2021-06-09 我要评论

我用三个线程并发往DolphinDB分布式表写入时,三个批处理作业有2个出现如下图所示错误,请问是什么原因? 我的写入代码如下,其中分布式数据库是按天值分区: de...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

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

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Eventloop 是什么?是为了解决什么问题

    Eventloop 是什么?是为了解决什么问题

  • 关于JS中的闭包,求解答

    关于JS中的闭包,求解答

  • 有没有通过韵母查汉字的api?

    有没有通过韵母查汉字的api?

  • 假设接收方一直不从接收缓冲区读数据,

    假设接收方一直不从接收缓冲区读数据,

腾讯云代理商
海外云服务器