Talend 是 OnComponantOk 线程安全的
Talend is OnComponantOk Thread safe
我有一个关于与 Talend 有效并行的问题我正在构建一个 ETL,它并行删除多个文件然后更新数据库 table。
我的作业运行 tFlowToIterate === 并行迭代 x10 ===> tDelete ===OnComponanantOK===> tDBRow
我的 tDBRow 需要在 tFlowToIterate 中定义的变量才有效!但是我不清楚它为什么起作用的逻辑??? Talend 如何确保 tDBrow 在此下具有适当的值?
我的理论是 OnCompnanatOk link 上的 tDBRow 就像 child tDelete 迭代下的作品
任何人都可以解释这是如何/为什么有效的吗?
当 talend 启动一个新线程时,它会创建一个 globalMap 的副本,您的值在 globalMap 中,因此每个 DBRow 都有自己的 globalMap。 (如果您在 globalMap 中存储大量数据,这可能会导致更高的内存使用量。)
需要注意的是另一个方向,因为globalMap是写同步的。所以如果你在线程中给它赋值,它也会被写入父线程。在现实生活中,这意味着如果您尝试在 globalMap 中增加一个变量,您的并行线程将同时看到值 0 并写回 1。因此第 11 步将从 1 开始。
因此,如果你想避免这种情况,(例如 put ( hadError, true) 然后稍后检查 hadError ,当线程启动时确保你初始化那些你想在你的线程中依赖的值。或者如果逻辑更复杂然后使该子作业成为新作业,因此 globalMap 不会损坏。
我有一个关于与 Talend 有效并行的问题我正在构建一个 ETL,它并行删除多个文件然后更新数据库 table。
我的作业运行 tFlowToIterate === 并行迭代 x10 ===> tDelete ===OnComponanantOK===> tDBRow
我的 tDBRow 需要在 tFlowToIterate 中定义的变量才有效!但是我不清楚它为什么起作用的逻辑??? Talend 如何确保 tDBrow 在此下具有适当的值?
我的理论是 OnCompnanatOk link 上的 tDBRow 就像 child tDelete 迭代下的作品
任何人都可以解释这是如何/为什么有效的吗?
当 talend 启动一个新线程时,它会创建一个 globalMap 的副本,您的值在 globalMap 中,因此每个 DBRow 都有自己的 globalMap。 (如果您在 globalMap 中存储大量数据,这可能会导致更高的内存使用量。)
需要注意的是另一个方向,因为globalMap是写同步的。所以如果你在线程中给它赋值,它也会被写入父线程。在现实生活中,这意味着如果您尝试在 globalMap 中增加一个变量,您的并行线程将同时看到值 0 并写回 1。因此第 11 步将从 1 开始。
因此,如果你想避免这种情况,(例如 put ( hadError, true) 然后稍后检查 hadError ,当线程启动时确保你初始化那些你想在你的线程中依赖的值。或者如果逻辑更复杂然后使该子作业成为新作业,因此 globalMap 不会损坏。