数据库
首页 > 数据库> > java – 如何从API端点按需按数据库逐个获取yield yield结果?是否需要网络套接字?

java – 如何从API端点按需按数据库逐个获取yield yield结果?是否需要网络套接字?

作者:互联网

我正在考虑在应用程序中设置一个页面,每个查询都可以返回一个不适合内存的结果集,或者查询所有查询都非常昂贵.用户将点击“获取更多”以获得更多结果.我想知道我是否可以使用类似Java的yielder(http://benjiweber.co.uk/blog/2015/03/21/yield-return-in-java/)以及我是否需要Web套接字,例如Spring(http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html),以便客户端可以告诉服务器推送更多结果.你也可以举一个握手的例子..端点uri也会基于某个会话ID吗?此外,当像OrientDB / Neo4j这样的数据库返回Iterables时,它意味着我们可以保持连接打开并在几分钟后获得下一行没有问题吗?谢谢!

解决方法:

你在谈论两个不同的概念.

分页

如果您有一个大的结果集,并且需要逐个返回它以避免长查询时间或高内存要求,那么您将对结果集进行分页.

要执行此操作,您需要从客户端点击“获取更多”按钮的另一部分.每次需要更多时,服务器将从服务器接收请求,并使用一些分页查询命中数据库.

SQL中的示例(例如,第10页,10个结果/页):

SELECT * FROM Table OFFSET 100 LIMIT 109

Websockets / Yielder

当服务器是发送数据的服务器时,你需要一个websocket / yielder,换句话说,客户端不需要更新,它只保持套接字打开,并在它们到来时从服务器接收更新.
这就是Message服务的情况,例如,避免从客户端进行持续轮询.

在你的情况下绝对没有必要的websocket.你还可以看到我在这里说的一个例子 – > What’s the behavioral difference between HTTP Stay-Alive and Websockets?

但是,您可以在后端和数据库之间建立保持连接,以避免每次用户需要更多结果时不断关闭/打开连接.

最后,关于Iorable的问题导致了Neo4j. Neo4j的结果类型是Map< String,Object>的可迭代列表.表示键值对列表.这不会使连接保持活动状态(默认情况下),它只会迭代该特定查询的返回结果.

标签:java,yield,spring,websocket,graph-databases
来源: https://codeday.me/bug/20190708/1400355.html