POSIX-style filesystem on top of a SQL database using FUSE. At the moment, this filesystem only supports CockroachDB. This is a proof of concept and has limitations. See Future Work below.
This project uses bazil.org/fuse, which is a Go library for writing FUSE userspace filesystems. Bazil implements the kernel-userspace communication protocol.
sql-fs
will communicate with the kernel through Bazil to register the mount/
mountpoint as a filesystem. The kernel will forward all filesystem operations for that filesystem back to the sql-fs
process through the communication channel established.
- CockroachDB
- FUSE kernel driver and libraries:
- Mac: OSXFUSE
- Linux:
fuse
package
- Go.
Assuming that CockroachDB is listening on port 26257
, here are the steps to run sql-fs:
# Clone the sql-fs git repository
git clone [email protected]:imjching/sql-fs.git
cd sql-fs
# Run schema.sql
cockroach sql --insecure < schema.sql
# Build the binary and start the filesystem
make run
# Your mountpoint will be ./mount
- Support for multiple databases (MySQL, PostgreSQL, etc.) with abstraction.
- Concurrent file access. The current implementation for writing and reading is a little fragile.
- Tests.
- To FUSE or Not to FUSE: Performance of User-Space File Systems: https://www.usenix.org/system/files/conference/fast17/fast17-vangoor.pdf