我有一个用例,我必须从两个不同的数据库中分别获取10k条记录,并做一些数据丰富,并将这20k条记录分批推送到第三个数据库。
我遵循的方法是
但是在做这个事情的时候,我经常在我的transform message组件中面临MULE JVM错误的意思。
Message : java.lang.StackOverflowError.
Error type : MULE:FATAL_JVM_ERROR
有没有什么博客或者mule中的设计模式可以更好的解决这个问题?
Dataweave代码。
<ee:transform doc:name="Outer Join And Merge" doc:id="fd801b56-9992-4a89-95a3-62ab4c4dc5a2">
<ee:message>
<ee:set-payload>%dw 2.0
import * from dw::core::Arrays
output application/java
var joinedData = outerJoin(vars.databaseOneRecords,vars.databaseTwoRecords,(obj)->obj.StudentID,(obj)->obj.RollNumber)
---
joinedData reduce ((item, acc = {
'matched': [],
'unmatched': []
})
-> if(item.l != null and item.r != null)
{
matched: (acc.matched default []) ++ [item.l ++ item.r],
unmatched: acc.unmatched
}
else {
matched: acc.matched,
unmatched: (acc.unmatched default []) ++ [ if(item.l != null) item.l else item.r ]
} )</ee:set-payload>
</ee:message>
</ee:transform>
我通常在 "ETL "世界里看到2种模式。
具体说到Mule,他们是否全开内存,要看你如何从流中获取信息。例如,如果你做一些类似groupBy的事情,或者在上面做一些搜索,强制它回去,很可能就是全流进入Memory了。