▲ | ZenoArrow 3 days ago | |||||||
> Closest realization of "filesystem as a database" that I know of More so than BFS? https://en.m.wikipedia.org/wiki/Be_File_System "Like its predecessor, OFS (Old Be File System, written by Benoit Schillings - formerly BFS), it includes support for extended file attributes (metadata), with indexing and querying characteristics to provide functionality similar to that of a relational database." | ||||||||
▲ | koverstreet 3 days ago | parent [-] | |||||||
What BFS did is very cool, and I hope to add that to bcachefs someday. But I'm talking more about the internals than external database functionality; the inner workings are much more fundamental. bcachefs internally is structured more like a relational database than a traditional Unix filesystem, where everything hangs off the inode. In bcachefs, there's an extents btree (read: table), an inodes btree, a dirents btree, and a whole bunch of others - we're up to 20 (!). There's transactions, where you can do arbitrary lookups, updates, and then commit, with all the database locking hidden from you; lookups within a transaction see uncommitted updates from that transaction. There's triggers, which are used heavily. We don't have the full relational model - no SELECT or JOIN, no indices on arbitrary fields like with SQL (but you can do effectively the same thing with triggers, I do it all the time). All the database/transactional primitives make the rest of the codebase much smaller and cleaner, and make feature development a lot easier than what you'd expect in other filesystems. | ||||||||
|