starrocks为了方便各种存储的支持和扩展,并且同样为了支持介入不同的存储服务,可以将整个存储系统分为三层。
- IO层:定义输入输出流的统一接口,然后为不同的存储服务进行实现。例如本地文件、s3
- fs层:在IO层之上提供了一层文件系统层。可以为不同的存储服务提供统一的文件读写接口。
- format层:基于fs层,实现不同格式的文件的读写。 通过上述的存储分层,这样的话在不同层进行扩展就可以实现对应的文件格式,存储服务等等的介入了。
其中fs层作为承上启下的一层,并且文件和文件系统的概念也是我们最为熟知的概念,因此就从这一层作为突破点,从而对整个存储系统进行深入的学习。
FS
提供了一个FS文件系统的抽象接口,以及顺序读、随机读,写的话只有顺序写,并没有随机写。
// 顺序读选项
struct SequentialFileOptions
// 顺序读文件
class SequentialFile;
// 随机读选项
struct RandomAccessFileOptions;
// 随机读文件
class RandomAccessFile;
// 顺序写选项
struct WritableFileOptions;
// 顺序写文件
class WritableFile;以及为不同类型存储服务抽象出来的管理这些文件的基类。
// 文件系统选项
struct FSOptions;
// 文件系统
class FileSystem;