I have been self-studying computer science and have a passion for elixir. I want to implement a simple relational database from a few assignments.
But since then, a lot of questions which I haven’t solved. I have core layers are buffer manager layer and it manages disk manager layer
Buffer Manager fetches N pages in a unit of bytes to perform actions faster in memory from the disk manager. If I assume that each page is one struct with one list of multiple records
How do fetch these structs into memory do something and then flush them from memory to disk such as external merge sorting?
What’s the module name similar to the Java Serialization interface or something like that?
I know this thing isn’t suitable in elixir form. But I really have a passion for Elixir/Erlang and hope to bring elixir in my background all time. I want to make things challenging myself in Elixir/Erlang to use proficient or anyone interest in this thing like me can see them.
For serialization, you could use the built in erlang:term_to_binary/1 on any term, and use Erlang -- zlib for compression, or an external zstd library.
If you are interested in how a database engine can be implemented entirely in Elixir, you can give a look to CubDB (it’s a bit of shameless self promotion, as I am the author ). It is not a relational database, but rather an embedded datastore supporting key/value access, selection of ranges, and atomic transactions, but such a storage engine is normally the core on top of which relational features are implemented.