我正在使用API来查询数据库服务器(在我的情况下是Oracle)来检索大量数据。 (这实际上是JDBC之上的一层。)
我创建的API尝试尽可能地将每个查询信息加载到内存中。我的意思是我更喜欢迭代结果集并逐个处理返回的行,而不是加载内存中的每一行并在以后处理它们。
但我想知道这是否是最好的做法,因为它有一些问题:
另一方面,它有一些优点:
在回应甘道夫时,我补充了一些信息:
我正在与主数据管理应用程序集成并检索数据,以便验证它们或使用许多不同的格式(到ERP,Web平台等)导出它们。
答案 0 :(得分:1)
没有普遍的答案。我个人实施了两次解决方案。
这取决于对您更重要的事情:内存或网络流量。
如果您有快速网络连接(LAN
)和糟糕的客户端计算机,则从服务器逐行获取数据。
如果你在Internet
上工作,那么批量提取会对你有帮助。
您可以设置预取计数或数据库图层属性,并找到中庸之道。
经验法则是:获取您可以保留的所有内容,而不会注意到它
如果您需要更详细的分析,则涉及六个因素:
Oracle
生成第一行/最后一行)其中一个将成为瓶颈。
通常,rate
和responce time
是对手。
通过预取,您可以控制行传递响应时间和行传输速率:更高的预取计数会提高速率但会缩短响应时间,更低的预取计数将执行对面。
选择哪一个对您更重要。
您还可以执行以下操作:为获取和处理创建单独的线程。
只选择行,以便用户在低预取模式下使用(具有高响应时间),然后切换到高预取模式。
它将在后台获取行,您也可以在后台处理它们,同时用户浏览第一行。