我正在开发一个 API 来查询数据库服务器(在我的例子中是 Oracle)以检索大量数据。(这实际上是 JDBC 之上的一层。)
我创建的 API 试图尽可能限制将每个查询信息加载到内存中。我的意思是,我更喜欢迭代结果集并逐一处理返回的行,而不是将每一行加载到内存中并稍后处理它们。
但我想知道这是否是最佳做法,因为它有一些问题:
- 结果集在整个处理过程中保持不变,如果处理时间与检索数据一样长,则意味着我的结果集将打开两倍
- 在我的处理循环中执行另一个查询意味着在我已经使用一个结果集时打开另一个结果集,同时开始打开太多结果集可能不是一个好主意。
另一方面,它有一些优点:
- 对于结果集,我的内存中的数据永远不会超过一行,因为我的查询往往会返回大约 100k 行,这可能是值得的。
- 由于我的框架很大程度上基于函数式编程概念,因此我从不依赖多个行同时在内存中。
- 在数据库引擎仍在返回其他行的同时开始对返回的第一行进行处理可以极大地提高性能。
作为对甘道夫的回应,我添加了更多信息:
- 我总是需要处理整个结果集
- 我没有对行进行任何聚合
我正在与主数据管理应用程序集成并检索数据,以便验证它们或使用许多不同的格式(到 ERP、到 Web 平台等)导出它们