当前位置: 首页 > 知识库问答 >
问题:

在REST/WebFlux上公开整个IMap,而不过度使用堆

邢华清
2023-03-14

我有一个分布式Hazelcast地图(IMap),它可能非常大。

我的任务是返回整个map values()集合,作为对HTTP GET请求的响应。

为了最小化堆的利用率,我计划使用Spring WebFlux并返回Flux的一个实例。

我担心的是,imap#values().iterator().next()的调用(在flux.fromiterable()中是隐式的)可能会反序列化来自所有集群成员的所有值,从而破坏JVM的堆,JVM是一个为GET请求服务的Hazelcast客户机。

如果这种担心是有根据的,那么:

Hazelcast Jet会提供一个解决方案吗?我可以创建一个Pipeline.WithSource(IMap),但是我如何将接收器创建为可以返回的Flux实例呢?

非常感谢,罗宾。

共有1个答案

柳高卓
2023-03-14

这种担心是有道理的。实际上有一个查询大小限制(参见此处),对于一个大的映射,values()调用将失败。

Jet对于请求-响应场景并不有用:它可以以流式方式处理大型映射,但它将映射条目传递给接收器而不是调用方。你也许可以搞定它,但这不是直接的。

在即将发布的Hazelcast4.1中,将有最适合您的用例的SQL API:如果您使用SQL查询映射,即使是大的结果也可以流式传输到客户机,而不需要持续使用内存。

 类似资料:
  • 我有一个entity类,它有一个映射为的自然ID字段,而我没有任何代理ID(仅为表ID发明的字段)字段。并且,在Jackson编组的JSON中,我看到了一个额外的。 所以不是: 我支持这些依赖: Spring Boot 2.0.3。

  • 问题内容: 使用REST接口公开MySQL数据库的最简单方法是什么? 我可以在Internet上找到的唯一指南只是使用NetBeans。我不是NetBeans的忠实拥护者… 我想检索该数据,并能够使用此REST接口更新数据库上的数据。 仅供参考,这是针对我当前正在使用的iPhone应用程序。 问题答案: 正如dorkitude所评论的那样,这取决于您可以使用/想要使用哪种语言。 我找到了项目PHP

  • 我使用的是Spring Boot1.5.3、Spring Data REST、Hateoas。我有一个简单的实体模型: 我的枚举角色是: null

  • 我有一种情况,我可以使用阻塞I/O库访问外部服务上的RESTendpoint,或者在这种情况下,我可以直接使用HttpClient(如WebClient)调用REST。现在,我想知道在包装对该库的调用和将其发布到弹性线程或使用WebClient访问endpoint之间是否存在性能差异。 如何准确地处理调用这两个选项。所以我们假设网络流量使用单线程来处理请求。然后,请求将由WebClient处理。这

  • 问题内容: 我想使用Spring Rest界面公开所有ID。 我知道默认情况下,这样的ID不会通过rest接口公开: 我知道我可以使用它来公开ID : 但是,有没有一种简便的方法可以在不手动维护此列表的情况下公开所有ID ? 问题答案: 当前,SDR无法提供此功能。SDR Jira跟踪器上的此问题说明了为什么无法(也许不应该)的原因。 从根本上说,由于ID已包含在响应的链接中,因此您无需将ID 公