不能一概而论。这种策略只是为了在常用文件系统中达到性能最优化的最简单方式。 不同硬盘、不同文件系统、不同的磁盘IO调度算法……都会对日志文件读写产生很大的影响。 比如适用数据是被整体访问场景的 HDFS。日志文件采用追加写,可以做到最小化硬盘的寻址开销,只需要一次寻址即可,这时寻址时间相比于传输延时可忽略。 还有知道文件明确的偏移量的 Kafka。采用分段和索引的方式来解决查找效率问题。Kafka 把一个 patition 大文件又分成了多个小文件段,每个小文件段以偏移量命名,通过多个小文件段,可以使用二分搜索法很快定位消息。 而 HBase,LevelDB 等 NoSQL 数据库的存储引擎则使用了日志结构的合并树LSM(The Log-Structured Merge-Tree)。Log-Structured 的思想是将整个磁盘看做一个日志,在日志中存放永久性数据及其索引,每次都添加到日志的末尾。LSM-tree 牺牲了部分读性能,以此来换取写入的最大化性能。 对于大文件的读写,不同文件系统的性能差异非常大。
不能一概而论。这种策略只是为了在常用文件系统中达到性能最优化的最简单方式。
不同硬盘、不同文件系统、不同的磁盘IO调度算法……都会对日志文件读写产生很大的影响。
比如适用数据是被整体访问场景的 HDFS。日志文件采用追加写,可以做到最小化硬盘的寻址开销,只需要一次寻址即可,这时寻址时间相比于传输延时可忽略。
还有知道文件明确的偏移量的 Kafka。采用分段和索引的方式来解决查找效率问题。Kafka 把一个 patition
大文件又分成了多个小文件段,每个小文件段以偏移量命名,通过多个小文件段,可以使用二分搜索法很快定位消息。
而 HBase,LevelDB 等 NoSQL 数据库的存储引擎则使用了日志结构的合并树LSM(The Log-Structured Merge-Tree)。Log-Structured 的思想是将整个磁盘看做一个日志,在日志中存放永久性数据及其索引,每次都添加到日志的末尾。LSM-tree 牺牲了部分读性能,以此来换取写入的最大化性能。
对于大文件的读写,不同文件系统的性能差异非常大。