Earlier quoted context omitted.
> From what I can tell, this doesn't replace the lower level page heap storage, but instead actually provides new implementation of table and indexes These seem contradictory. If the data is stored in FoundationDB, then it won't be stored in the filesystem as blocks, right?
Correct, my point is that it replaces storage at a higher level. For example, mvsqlite implements a SQLite VFS that maps page to FoundationDB keys. This means that once the VFS is in place, everything is in FDB. But this means that you have to deal with page conflicts if you want multiple writers to mount the same database, so it's a somewhat coarse-grained system. What this project is doing allows one to represent e…
That's absolutely right! mvsqlite is a cool project but it doesn't make good use of FoundationDB in a way, which I find a bit unfortunate what a nice piece of software it is!
> This is presumably why database metadata (DDL) isn't currently persisted, because those structures aren't normal tables.
Yes, although perhaps a fun fact that all database metadata in Postgres is actually stored as standard tables, the so called system catalog: https://www.postgresql.org/docs/current/catalogs.html.
I'm still mulling over how to implement DDL persistence but one possible way would be to change the actual system catalog tables to be backed by FDB instead, and rely on some cache on the nodes to avoid round tripping to FDB to get metadata for each query.
As you can imagine though the system catalog is quite deeply intertwined with Postgres as a whole so remains to be seen if this is even doable. The alternative would be a more complicated design where the data is stored in some custom format in FDB and then synced by each node into the system catalog.