我正在使用网络抓取工具,必须处理大数据(数万亿个数据文件中的大约160 TB原始数据)。
数据应存储为磁性硬盘上的一个大bz2文件。 SSD用于保存元数据。硬盘上最重要的操作是对磁盘上所有4 TB的顺序读取,这应该以150 MB / s的最大速度完成。
我不想浪费文件系统的开销而是直接使用“/ dev / file”设备。此访问是否使用os块缓冲区?访问操作是以FIFO方式排队还是同步?
使用/ dev / file或编写自己的用户级文件系统会更好吗? 有没有人体验过它。
答案 0 :(得分:0)
如果您不使用任何文件系统但直接读取您的磁盘设备(例如/dev/sdb
),则会失去文件系统缓存的所有好处。我完全不确定这是值得的。
请记住,您可以使用readahead(2)或posix_fadvise(2)或madvise(2)等系统调用来向内核提供提示以提高性能。
此外,您可能在使文件系统使用比平常更大的块大小时。并且在read(2)数据时不要忘记使用大块(例如64到256 KB)。您还可以使用mmap(2)从磁盘获取数据。
我建议不要“编写自己的文件系统”。现有的文件系统已经过调整(有些用于PB级存储)。您可能希望在制作时选择大块(例如-b
和mke2fs(8) ...)
/dev/sdb
路径;如果需要文件,则指定/home/somebigfile
)。您可以对webcrawler进行编码以便能够同时执行这两种操作,然后对两种方法进行基准测试很可能,性能可能取决于实际的系统和硬件。
作为一个例子,关系数据库引擎在上个世纪(例如20世纪90年代)经常使用原始磁盘分区,但现在似乎经常使用大文件。
请记住,真正的瓶颈是硬件(即磁盘):文件系统使用的CPU时间通常无关紧要,甚至无法测量。
PS。我对这些问题的最近经验并不多。