多线程写入分布式表时提示filePath has been owned by transaction 52053
我用三个线程并发往DolphinDB分布式表写入时,三个批处理作业有2个出现如下图所示错误,请问是什么原因?
我的写入代码如下,其中分布式数据库是按天值分区:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为多个批处理作业并发往同个分区写入数据了。
在DolphinDB database中,同一个分区不能被多个writer并发写入,当一个分区被某一个事务A锁定之后,另一个事务B试图再次去锁定这个分区时,系统立刻会抛出异常导致事务B失败回滚。详见https://github.com/dolphindb/...