我想将2TB数据写入一个文件,将来它可能是一个PB级.
数据由所有数据组成'1'.例如,2TB数据由"1111111111111......11111"(每个字节由'1'表示)组成.
以下是我的方式:
File.open("data",File::RDWR||File::CREAT) do |file|
2*1024*1024*1024*1024.times do
file.write('1')
end
end
Run Code Online (Sandbox Code Playgroud)
这意味着,File.write被称为2TB次.从Ruby的角度来看,有没有更好的方法来实现它?
你有一些问题:
File::RDWR||File::CREAT总是评估为File::RDWR.你的意思是File::RDWR|File::CREAT(|而不是||).
2*1024*1024*1024*1024.times do运行循环1024次然后将循环的结果乘以左边的东西.你的意思(2*1024*1024*1024*1024).times do.
关于你的问题,我通过一次写入1024个字节来获得显着的加速:
File.open("data",File::RDWR|File::CREAT) do |file|
buf = "1" * 1024
(2*1024*1024*1024).times do
file.write(buf)
end
end
Run Code Online (Sandbox Code Playgroud)
您可以尝试并找到比1024更好的缓冲区大小.