我有一个人已经实施过程。我将尝试描述这些要求,我希望能得到一些“最佳方式”的输入。
这是针对金融机构的。
我有一个路由框架,允许我接收文件并向其他系统发送请求。我有一个我可以使用的数据库,但只有我和我的软件可以访问这个数据库。
事实
要求
很高兴
你会如何设计? 我稍后会添加当前的“黑客”和我的简短想法
==========当前解决方案================
它在BEA / Oracle Weblogic Integration上运行,而不是按照选择而是按照定义
收到文件后,每行都会用
读入数据库
id, line, status,batchfilename和状态'需要处理'
当所有行都在数据库中时,行按mod 4分开,每个行的每个季度开始一个进程,并且需要它的每一行都被getPerson调用丰富,状态设置为'Processed'。 (当前批次为38.0000)。
当行的所有4个排序都已处理时,编写器进程从该数据库中选择100行开始,将它们写入文件并将其状态更新为“已写入”。 完成所有操作后,新文件将被传回路由框架,并向操作人员发送“即时完成”电子邮件。
4个处理进程可能会/将会失败,因此可以使用http get到WLI上的servlet重新启动它们。
答案 0 :(得分:4)
尽可能简化。
批次(试图将它们作为单位处理,并且它们的各种尺寸)在最简单的过程中似乎是可丢弃的。听起来这些行是原子的,而不是批次。
通过异步FIFO消息队列将所有行作为单独的原子事务提供,具有良好的检测机制(以及适当的日志记录和路由故障)。然后,您可以在异常的基础上严格处理问题。 (数据库中的队列表可能有效。)
仅使用消息记录中的列维护批次标识,并根据需要通过该方式汇总批次,无论何时需要。
答案 1 :(得分:1)
收到文件后,解析文件并将信息放入数据库中。
创建一个包含每行记录的表,该表需要getPerson请求。
让一个或多个线程从此表中获取记录,执行请求并将完成的记录放回表中。
处理完所有记录后,生成完整的文件并将其返回。
答案 2 :(得分:1)
如果文件的处理需要2天,那么我将从实现某种简历功能开始。将大文件拆分为较小的文件并逐个处理。如果由于某种原因整个处理过程中断,那么你就不必重新开始了。
通过将较大的文件拆分为较小的文件,您还可以使用更多的服务器来处理文件。
您还可以使用一些批量加载器(例如Oracles SQL Loader)将大量数据从文件中取出到表中,再次添加一列来标记该行是否已被处理,这样您就可以选择如果进程崩溃,你就离开了。
返回值可能是许多小文件,最后这些小文件将组合成大型单个文件。如果选择了数据库方法,您还可以将结果保存在一个表中,然后可以将其提取到csv文件中。