我正在考虑在应用程序中设置一个页面,每个查询都可以返回一个不适合内存的结果集,或者查询所有查询都非常昂贵.用户将点击“获取更多”以获得更多结果.我想知道我是否可以使用类似Java的yielder(http://benjiweber.co...
我正在考虑在应用程序中设置一个页面,每个查询都可以返回一个不适合内存的结果集,或者查询所有查询都非常昂贵.用户将点击“获取更多”以获得更多结果.我想知道我是否可以使用类似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 – 如何从API端点按需按数据库逐个获取yield yield结果?是否需要网络套接字?
基础教程推荐
- Java整合腾讯云短信发送实例代码 2023-08-07
- Java浅析代码块与构造块及静态块三者之间的关系 2023-03-16
- SpringBoot bean依赖属性配置详细介绍 2023-06-01
- Java JVM虚拟机调优详解 2023-03-11
- 以Java Web项目为例浅谈前后端分离开发模式 2022-09-03
- springboot各种下载文件的方式汇总 2023-06-11
- SpringBoot整合SpringSecurity实现JWT认证的项目实践 2023-03-21
- 关于对Java正则表达式"\\"的理解 2023-05-19
- Java与JavaScript前后端实现手机号验证码一键注册登陆抖音流程 2023-01-29
- Java简单使用EasyExcel操作读写excel的步骤与要点 2023-05-14