我听到了过去的回声,我想提供一种不同的方法,以防万一您要重复我的错误。它可能会或可能不适用于您的情况。
您写道,您需要从数据库中提取大量数据,然后保留回数据库。
是否可以将需要使用的外部数据临时插入到数据库中,并执行数据库内的所有处理?这将具有以下优点:
- 它消除了需要提取大量数据
- 它消除了需要持续大量的数据
- 它使基于集合的处理(其性能优于程序)的
- 如果您的数据库支持它,您可以使用并行执行
- 它为您提供了一个框架(表和SQL)来报告您在过程中遇到的任何错误。
举个例子。很久以前,我实施了一个(java)程序,其目的是将文件中的购买,付款和相关客户数据加载到中央数据库中。那时(我对此深感遗憾),我设计了负载以逐个处理事务,并为每个数据执行多个数据库查找(sql),最后还有一些插入到适当的表中。当然,这个数量一旦增加就不会缩放。
然后我又犯了一个错误。我认为这是数据库问题(因为我有听说 SELECT慢),所以我决定从数据库中提取所有数据,并在Java中进行所有处理。然后最后将所有数据保存到数据库。我用回调机制实现了各种各样的层,以轻松扩展加载过程,但我无法让它表现良好。
从后视镜看,我应该做的是在表格中临时插入(可笑的少量)100,000行,并从那里处理它们。如果我发挥我掌握的所有技术的优势,花费将近半天的时间处理最多花费几分钟的时间。