海藻FS文件存储的意义何在?



根据GitHub,SeaweedFS旨在成为一个简单且高度可扩展的分布式文件系统,使您能够快速存储和获取数十亿个文件。然而,我不理解SeaweedFS Filer的意义,因为它需要在SeaweedFS之上的外部数据存储:

在对象存储之上,可选的Filer可以支持目录和POSIX属性。Filer是一个独立的线性可伸缩的无状态具有可定制元数据存储的服务器,如MySql, Postgres,Redis、Cassandra、HBase、Mongodb、Elastic Search、LevelDB、RocksDB、Sqlite, MemSql, TiDB, Etcd, CockroachDB等

对于Filer的工作,它首先需要"查找元数据从文件存储,它可以是Cassandra/Mysql/Postgres/Redis/LevelDB/etcd/Sqlite",然后从卷服务器读取数据。

既然SeaweedFS Filer需要在检索实际文件之前从另一个数据存储(如Casandra, Scylla DB或HBase)检索文件元数据,为什么不使用相同的数据存储来存储实际文件?将文件元数据存储在一个数据存储中,而将实际文件存储在SeaweedFS中,可以获得什么?

例如,GlusterFS在底层文件系统中以xattrs的形式存储元数据,因此不需要外部数据存储。

是否需要一个外部数据存储破坏了使用SeaweedFS的全部目的,因为它需要两个跃点(往返)而不是一个?因为我们现在需要1)从外部存储获取文件元数据2)获取实际文件。如果我们将实际文件存储在外部数据存储中,我们可以一步就得到它,而不是两步。

元数据包括每个文件的元数据和目录结构。

前者类似于您提到的xattrs

后者更像是一个图数据库,可以通过键值存储或SQL存储来实现。

对于键-值存储或SQL存储,保存大量文件内容数据的效率不高,因为每个键上可能有多次读/写操作,这是为了维护有效查找的数据顺序。这种写放大效果不好,特别是当文件大小在GB/TB/PB级别时。

最新更新