In this post I’m going to give a very casual overview of the ART (adaptive radix tree)1 data structure used for indexing in DuckDB. 2 This is mainly to give a feel of the data structure as a whole without any concerns for how it is integrated into the database. I haven’t written in a while, so I thought showing a pretty printer would be a fun and easy post to write :-) Leis, V., Kemper, A., &…
In the last two sections, we went over how TUN devices work, and I showed some local network setup that allows two tun devices to forward packets between each other. In this section, I will go over an overarching sketch of the concurrency architecture for my TCP stack, and create the skeleton for the client/TCP program interaction.
As I set out to implement TCP in OCaml, I ran up against a very simple problem: where should it go? There is an existing kernel space tcp, and I want to implement my own as a user space program. The solution to this is TUN/TAP. TUN/TAP allows you to implement a user space program that can read IP packets over a virtual network device.
Welcome back to part 2 of this series, in which we are implementing a disk backed B+ tree. In this part we will go over the B+ tree in-memory data structure, how to serialize that data structure into a disk layout, and how to deserialize the disk layout back into the in-memory node type.
I am working through the MIT distributed systems lab, and I wanted to share my experience and post on some cool things that I’ve been learning. I really appreciate courses that post all their materials online, so out of respect for the course, I wont be sharing any of my code online. I figure this will take up a big chunk of my time, however, so I want to log my journey through the course. The…
In this series we will be implementing a disk based B+ tree in OCaml. Here in part 1, we will cover the file and storage managers which we will use for our B+ tree implementation. I will start with a top down introduction that will help give an intuition for what we want out of our file/storage manager design, such that it will seamlessly integrate with the actual algorithm implementation later…
Part 4 covered two big topics: registering optimization passes and setting up a JIT to compile our code on the fly. Challenge #5 - Find Examples for Optimization Passes.
Hello again! In the last blog post: Getting Acquainted with LLVM Codegen Part 1, we split up the code from the tutorial into separate modules, and also got rid of the global LLVM context, moving it locally to the codegen module. This blog post will continue the tutorial, and we will add some extensions to the code.
Before moving onto chapter 4, let’s tinker with the code we have so far. I am posting some easy challenges here (and the solutions will be posted as well shortly).
I am currently looking at chapter 3 of the LLVM Kaleidoscope Language tutorial, where a simple language called Kaleidoscope is implemented to learn about how LLVM works. Here is a link to the tutorial: LLVM Tutorial Chapter 3.
I want to start this blog post with a quick TL;DR before I get into musings – this post is about a rewrite of Edward Sciore’s simple DB from the book “Database Design and Implementation”, which is originally in Java, but we ported (a good chunk of it) to OCaml. If you’re interested in the book, but don’t want to do Java, I’m posting this forward to encourage you to take the code and hack away on…
Hello world! I am kicking off my blog as part of an online bookclub that I just joined. Phil Eaton is hosting the book club, and this go around we are covering “Database Design and Implementation” by Edward Sciore.