postgresql - 从gsp中的数据库(postgresql)检索一百万个数据

标签 postgresql grails

我需要从数据库中提取数百万个数据到GSP页面,我编写了类似的查询

"select * from tablename";

现在,如果我上传的内容多于显示错误的内容,则一次只能检索一千行
java.lang.OutOfMemoryError: GC overhead limit exceeded

我没有使用休眠模式。如何在Grails项目中获取大量数据?

最佳答案

您有2个选项:使用分页或使用查询结果迭代器

如果您使用的是Grails,我建议您使用Hibernate,它允许您创建SQL查询而不用手工编写它们,并且可以处理与安全性有关的所有问题。此外,请限制您的请求:*并非总是必需的,并且可以节省请求时间/内存。

分页

这是处理大量数据的最佳方法:您只需要将查询拆分为子查询,即可返回已知的行数。为此,您必须使用SQL闭包LIMITOFFSET

例如,您的查询可能是:select * from tablename LIMIT 100 OFFSET 2000。您只需要更改OFFSET参数即可检索所有值。

因此,您的后端将不必一次处理大量数据。此外,您可以使用Javascript在呈现先前结果的同时将请求发送至后端,从而缩短了响应时间(例如,异步滚动的工作原理如下)。

Grails具有默认的分页系统,您可以按原样使用。请查看官方文档here。如果您不使用Hibernate,也许您需要对其进行一些调整。

查询结果迭代器

您可以通过对结果使用迭代器来处理大量数据,但这取决于查询框架。此外,使用这种方法,您将生成巨大的HTML页面,其中的大小可能是个问题(请记住:您有一个OutOfMemory,因此您谈论的是数百或数千个Mo;一次,用户将必须下载他们同步!)

关于postgresql - 从gsp中的数据库(postgresql)检索一百万个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38540367/

相关文章:

postgresql - 为什么 PostgreSQL 在函数中以不同方式对待我的查询?

php - 使用 php 将复选框输入插入 postgresql

postgresql - Slick and bonecp : org. postgresql.util.PSQLException : FATAL: sorry, 太多客户端已经错误

Grails 监视文件在 Vagrant 虚拟机内运行的 Docker 容器中不起作用

database - PostgreSQL 语法 - DROP DTB

grails - 如何在登录页面中显示即时消息

View 中未呈现验证错误

grails - 使用多个belongsTo,但一次只有一个

grails - grails中的URL重写(重写规则)

python - Django如何合并查询结果