【发布时间】:2023-07-11 15:22:01
【问题描述】:
我正在开发一个 API 来查询数据库服务器(在我的例子中是 Oracle)以检索大量数据。 (这实际上是 JDBC 之上的一层。)
我创建的 API 试图尽可能限制将每个查询信息加载到内存中。我的意思是我更喜欢遍历结果集并逐一处理返回的行,而不是将每一行加载到内存中并稍后处理。
但我想知道这是否是最佳做法,因为它存在一些问题:
- 在整个处理过程中会保留结果集,如果处理时间与检索数据一样长,则意味着我的结果集将打开两倍的时间
- 在我的处理循环中执行另一个查询意味着打开另一个结果集,而我已经在使用一个结果集,同时开始打开太多结果集可能不是一个好主意。
另一方面,它有一些优点:
- 我的结果集在内存中的数据永远不会超过一行,因为我的查询往往会返回大约 100k 行,这可能是值得的。
- 由于我的框架主要基于函数式编程概念,因此我从不依赖多个行同时在内存中。
- 在数据库引擎仍在返回其他行的同时开始处理返回的第一行可以极大地提高性能。
作为对甘道夫的回应,我补充一些信息:
- 我总是需要处理整个结果集
- 我没有对行进行任何聚合
我正在与主数据管理应用程序集成并检索数据,以验证它们或使用多种不同格式(到 ERP、Web 平台等)导出它们
【问题讨论】:
-
“SQL server (Oracle)”是什么意思?
-
试图澄清,很抱歉造成混乱
-
为了权衡好处,我们确实需要更多地了解您如何使用查询结果。你会一直处理整个结果集吗?您是将每个结果的值加在一起,还是可以在数据库端完成的任何其他聚合工作?
标签: sql oracle jdbc memory-management master-data-management