相关疑难解决方法(0)

在文本文件Java中编写大量数据的最快方法

我必须在text [csv]文件中写入大量数据.我使用BufferedWriter来写入数据,大约需要40秒来写入174 MB的数据.这是java提供的最快速度吗?

bufferedWriter = new BufferedWriter ( new FileWriter ( "fileName.csv" ) );
Run Code Online (Sandbox Code Playgroud)

注意:这40秒包括迭代和从结果集中提取记录的时间.:).174 MB是结果集中的400000行.

java file resultset

64
推荐指数
4
解决办法
16万
查看次数

通过Java中的键聚合文件中的键值行

我有一个巨大的文件,由~800M行(60g)组成.行可以是重复的,由id和值组成.例如:

id1   valueA
id1   valueB 
id2   valueA 
id3   valueC
id3   valueA
id3   valueC
Run Code Online (Sandbox Code Playgroud)

注意:ids不按示例中的顺序(和分组).

我希望按键聚合行,这样:

id1   valueA,valueB
id2   valueA
id3   valueC,valueA
Run Code Online (Sandbox Code Playgroud)

有5000个可能的值.

该文件不适合内存,因此我无法使用简单的Java集合.此外,行的最大部分是单个(例如id2),它们应该直接写在输出文件中.

出于这个原因,我的第一个解决方案是迭代两次文件:

  • 在第一次迭代中,我存储了两个结构,只有id和没有值:
    • 单值ids(S1)
    • 多个值ids(S2)
  • 在第二次迭代中,在从内存中丢弃单值id(S1)之后,我可以直接将单值id-value对写入输出文件,检查它们是否不在多个值id中(S2)

问题是我无法完成第一次迭代导致内存限制.

我知道可以通过多种方式解决问题(键值存储,映射缩减,外部排序).

我的问题是什么方法可以更适应使用和快速实施?它只是一次进程,我更喜欢使用Java方法(而不是外部排序).

java memory hashmap key-value guava

6
推荐指数
1
解决办法
556
查看次数

使用接受文件的弹簧控制器防止内存不足错误

假设我正在使用 Spring 设计一个 REST 服务,并且我需要一个接受文件并返回某种 ResponseDto 的方法。应用程序服务器的 POST 请求大小限制为 100MB。这是假设的弹簧控制器方法实现:

public ResponseEntity<ResponseDto> uploadFile(@RequestBody MultipartFile file) {
        return ResponseEntity.ok(someService.process(file));
} 
Run Code Online (Sandbox Code Playgroud)

假设我的服务器有 64GB RAM。如果在短时间内(足够短,足以让process()方法仍然对上传的每个文件运行),1000 个用户决定上传 100MB 文件(或者只有 1 个用户同时上传),如何确保不会出现内存不足错误1000 个文件)?

编辑:为了澄清,我想确保我的应用程序不会崩溃,而只是停止接受/延迟新请求。

java upload spring file out-of-memory

5
推荐指数
1
解决办法
3759
查看次数

如何在Java中的8GB平面文件中的无序列表中查找名称

好吧,所以我们有这个问题,我知道我可以使用InputStream来读取流而不是读取整个文件,因为这会导致内存问题.

参考这个答案:https://stackoverflow.com/a/14037510/1316967

然而,关注的是速度,在这种情况下,我会读取整个文件的每一行.考虑到这个文件包含数百万个无序的名称,这个操作必须在几秒钟内完成,我该如何解决这个问题.

java io performance

0
推荐指数
1
解决办法
79
查看次数

标签 统计

java ×4

file ×2

guava ×1

hashmap ×1

io ×1

key-value ×1

memory ×1

out-of-memory ×1

performance ×1

resultset ×1

spring ×1

upload ×1