默认情况下不支持并发写入,即写写冲突,客户端会收到报错信息:
“The openChunks operation failed because the chunk <xxx> is currently locked and in use by transaction <tid>. RefId:S00002”
对于这种情况有几种解决思路:
1. 先写入流表,再订阅入库
subscribeTable(tableName="trades_stream", actionName="trades", offset=0, handler=loadTable("dfs://test", "trades", msgAsTable=true, batchSize=100000, throttle=60)
应用先并发写入trades_stream流表,然后流表订阅并写入DFS表。
2. 使用CHUNK原子级别
建库时指定参数 database("dfs://test",..., atomic="CHUNK"), 可以并发写同一个分区,server在后台检测到事务冲突时,会等待分区锁并重试,但是这个设置有可能会破坏事务原子性。