如果文件被拆分成固定大小的数据块,那这些数据块是怎么保证顺序的,以及数据库块的大小是固定的吗会不会出现大量的内存碎片,读取的时候是不是要占用大量内存进行合并数据库?
比如想读 1GB 的文件,在存储中是 sequantial read。如果全部读出来返回给请求端,更占内存,调用端的等待时间更长。都是 4K/64K/256K/1M 等容量去顺序读,以一个 streaming 的方式持续返回给调用端。所以 JuiceFS 把文件分成 block 存储不会影响性能。相反,还能提升性能。因为更容易通过并发方式同时读很多的 block 返回给调用端,当然获得高吞吐的同时,需要用一点内存资源来换文件被分成很多 data block 存在对象存储中,每个 block key 会存在 meta engine 里(直接存太占空间了,设计上 16 个 block 为一个 chunk,存储 chunkid + offset)。block size 默认设为 4MiB 是最大值,实际会有小于该值的 block。碎片合并有的。读取的时候不用担心,各种存储系统在读的时候也都是按某个大小的 page/block 去读
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。