▲ | koverstreet 3 days ago | |
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. | ||
▲ | ZenoArrow 3 days ago | parent [-] | |
Thank you for the details, appreciate it, sounds promising. |