如何在Java中获取170万条logging?

我正在使用MySQL数据库,其中一个表有170万条logging。 通过Java中的Restlet框架,我想获取这些logging并将其返回给客户端。 我正在使用远程服务器的Linux Centos。 我已经创build了WAR文件并上传到服务器上。 当我运行服务时,需要花费很多时间来回应。 我等了40分钟,但没有得到任何输出。 那么有人可以帮我解决这个问题吗?

当我有大量的行时,我使用了内存映射文件。 例如,我有一个数据库,我必须在一分钟内检索和处理11亿行。 (超过200 GB)

这是一个非常专业的方法,我怀疑有一种方法来调整你的SQL数据库或使用NoSQL数据库来做你想做的事情。 我会尽管你可以在一分钟内检索一百七十万,这取决于你在做什么(例如,如果你选择了这么多的几个结核病,需要一段时间)

但是,如果没有其他选择,您可以编写自定义数据存储。

顺便说一句:只有一个摘要产生。 没有人应该阅读那么多的行,当然不会在浏览器中显示它们。 也许你可以做一些事情来产生一个报告或摘要,所以发送客户端的数量就会减少。

这可能不会起作用:在内存中保存多行数据可能会导致内存不足异常(您可以查看服务器上的日志,看看究竟发生了什么?)。

要做这样的事情,你要么放弃这个计划,要做某种分页,要么你需要一个解决方案,让你把记录流到客户端,而不把它们存储在内存中。 我不确定Restlet框架可以做到这一点:您可能需要自己实现使用servlet。

我已经在我的应用程序中成功完成了这种工作。 如果你的客户已经准备好接受一个大的回应,那么这个方法没有任何问题。 重点是你需要传递响应,这意味着你不能把整个响应作为一个字符串来构建。 获取HTTP响应的输出流,并将记录逐个写入。 在db-end上,你需要设置一个可滚动的结果集(在JDBC级别以及在Hibernate级别上)。