Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现;“数据流”;在Java-数据库交互中?_Java_Database - Fatal编程技术网

如何实现;“数据流”;在Java-数据库交互中?

如何实现;“数据流”;在Java-数据库交互中?,java,database,Java,Database,背景: 我有一个基于java的应用程序,比如说AppA 它查询数据库,比如说DataD 它处理这些数据,发挥一些魔力,并将其传递给另一个应用程序,比如AppB 问题: DataD中的数据量相当大 我的AppA并没有真正具备一次性处理所有数据的能力 我的AppB对一次性获取所有数据也不感兴趣 解决方案: 我想从DataD查询数据,但每次只能查询10000个(可配置的)数据 我将在AppA中处理该批,将其传递到AppB,然后对DataD执行另一个查询 我必须告诉DataD,我已经读了多少条记录,并要

背景:

  • 我有一个基于java的应用程序,比如说AppA
  • 它查询数据库,比如说DataD
  • 它处理这些数据,发挥一些魔力,并将其传递给另一个应用程序,比如AppB
  • 问题:

  • DataD中的数据量相当大
  • 我的AppA并没有真正具备一次性处理所有数据的能力
  • 我的AppB对一次性获取所有数据也不感兴趣 解决方案:

  • 我想从DataD查询数据,但每次只能查询10000个(可配置的)数据
  • 我将在AppA中处理该批,将其传递到AppB,然后对DataD执行另一个查询
  • 我必须告诉DataD,我已经读了多少条记录,并要求它给出下一个10000条记录。因此,不知何故,我的AppA需要跟踪上次读取的数字,并有一种聪明的方法来有效地查询数据D以获取一系列数据
  • 我的DataD没有任何方法来记录(或维护)它已经返回的内容。它是一个数据库,也不可能将任何SOA/REST智能置于其之上。因此,我的AppA必须足够智能,才能查询特定的范围 问题:

  • 在核心java中不需要太多的杂耍,是否可以使用任何框架来实现这一点——我喜欢称之为“数据流”?如果是,怎么做
    听起来有点复杂,我建议你尽量把它简单化


    我会让AppA执行查询,并在得到每一行时对其进行处理,然后将派生数据写入AppB正在侦听的套接字。除非您知道这会导致性能问题,否则我不会让它变得更复杂。

    恐怕这行不通。正如我所说,我的AppA不能一次性处理所有数据。它只是没有那么多的记忆;AppA只需
    处理每一行即可
    我假设AppA至少可以处理一整行。是的。它绝对可以一次处理一行。事实上,即使是10000也没问题。但我想我没有抓住重点。据我所知,如果我要创建一个到DataD的JDBC连接并运行一个查询,我将一次性获得内存中的所有记录。我不会一次排一排。我遗漏了什么吗?您可以控制JDBC的预取大小,但它通常是合理的,并且非常小,例如10。啊,听起来不错。让我明天检查一下,我会回来报告的。