docs/zh_cn/introduction/comparison/juicefs_vs_s3ql.md
与 JuiceFS 类似,S3QL 也是一款由对象存储和数据库组合驱动的开源网络文件系统,所有存入的数据会被分块后存储到亚马逊 S3、Backblaze B2、OpenStack Swift 等主流的对象存储中,相应的元数据会存储在数据库中。
| S3QL | JuiceFS | |
|---|---|---|
| 项目状态 | 活跃维护 | 活跃开发 |
| 元数据引擎 | SQLite | Redis、MySQL、SQLite、TiKV |
| 存储引擎 | 对象存储、本地磁盘 | 对象存储、WebDAV、本地磁盘 |
| 操作系统 | Unix-like | Linux、macOS、Windows |
| 压缩算法 | LZMA, bzip2, gzip | LZ4, zstd |
| 加密算法 | AES-256 | AES-GCM, RSA |
| POSIX 兼容 | ✓ | ✓ |
| 硬链接 | ✓ | ✓ |
| 符号链接 | ✓ | ✓ |
| 扩展属性 | ✓ | ✓ |
| 标准 Unix 权限 | ✓ | ✓ |
| 数据分块 | ✓ | ✓ |
| 本地缓存 | ✓ | ✓ |
| 空间弹性伸缩 | ✓ | ✓ |
| 元数据备份 | ✓ | ✓ |
| 数据去重 | ✓ | ✕ |
| 只读目录 | ✓ | ✕ |
| 快照 | ✓ | ✕ |
| 共享挂载 | ✕ | ✓ |
| Hadoop SDK | ✕ | ✓ |
| Kubernetes CSI Driver | ✕ | ✓ |
| S3 网关 | ✕ | ✓ |
| 开发语言 | Python | Go |
| 开源协议 | GPLv3 | Apache License 2.0 |
| 开源时间 | 2011 | 2021.1 |
这部分主要评估两个产品在安装和使用上的的易用程度。
在安装过程中,我们使用 Rocky Linux 8.4 操作系统(内核版本 4.18.0-305.12.1.el8_4.x86_64)。
S3QL 采用 Python 开发,在安装时需要依赖 python-devel 3.7 及以上版本。另外,还需要至少满足以下依赖:fuse3-devel、gcc、pyfuse3、sqlite-devel、cryptography、defusedxml、apsw、dugong。另外,需要特别注意 Python 的包依赖和位置问题。
S3QL 会在系统中安装 12 个二进制程序,每个程序都提供一个独立的功能,如下图。
JuiceFS 客户端采用 Go 语言开发,直接下载预编译的二进制文件即可直接使用。JuiceFS 客户端只有一个二进制程序 juicefs,将其拷贝到系统的任何一个可执行路径下即可,比如:/usr/local/bin。
S3QL 和 JuiceFS 都使用数据库保存元数据,S3QL 仅支持 SQLite 数据库,JuiceFS 支持 Redis、TiKV、MySQL、MariaDB、PostgreSQL 和 SQLite 等数据库。
这里使用本地创建的 MinIO 对象存储,使用两款工具分别创建文件系统:
S3QL 使用 mkfs.s3ql 工具创建文件系统:
mkfs.s3ql --plain --backend-options no-ssl -L s3ql s3c://127.0.0.1:9000/s3ql/
挂载文件系统使用 mount.s3ql:
mount.s3ql --compress none --backend-options no-ssl s3c://127.0.0.1:9000/s3ql/ mnt-s3ql
S3QL 在创建和挂载文件系统时都需要通过命令行交互式的提供对象存储 API 的访问密钥。
JuiceFS 使用 format 子命令创建文件系统:
juicefs format --storage minio \
--bucket http://127.0.0.1:9000/myjfs \
--access-key minioadmin \
--secret-key minioadmin \
sqlite3://myjfs.db \
myjfs
挂载文件系统使用 mount 子命令:
sudo juicefs mount -d sqlite3://myjfs.db mnt-juicefs
JuiceFS 只在创建文件系统时设置对象存储 API 访问密钥,相关信息会写入元数据引擎,之后挂载使用无需重复提供对象存储地址、密钥等信息。
S3QL 采用对象存储 + SQLite 的存储结构,数据分块存储既能提高文件的读写效率,也能降低文件修改时的资源开销。贴心的提供了快照、数据去重、数据保持等高级功能,加之默认的数据压缩和数据加密,让 S3QL 非常适合个人在云存储上用较低的成本、更安全的存储文件。
JuiceFS 支持对象存储、HDFS、WebDAV、本地磁盘作为数据存储引擎,支持 Redis、TiKV、MySQL、MariaDB、PostgreSQL、SQLite 等流行的数据作为元数据存储引擎。除了通过 FUSE 提供标准的 POSIX 文件系统接口以外,JuiceFS 还提供 Java API,可以直接替代 HDFS 为 Hadoop 提供存储。同时还提供 Kubernetes CSI Driver,可以作为 Kubernetes 的存储层做数据持久化存储。JuiceFS 是为企业级分布式数据存储场景设计的文件系统,广泛应用于大数据分析、机器学习、容器共享存储、数据共享及备份等多种场景。