Dark Mode

I tend to only find time to work on RageDB at night. Staring at code in CLion using the “Darcula” theme works great. But like a vampire exposed to direct sunlight, things go horribly wrong when I try to test what I am working on using the RageDB front-end. You see, besides the code-editor, the rest of the interface is very bright. Blindingly so:

Continue reading
Tagged , , , ,

Observations of the LDBC SNB Benchmark

RageDB Mascot running

I’m still trying to figure out the right look for the language folks will use to talk to RageDB. Instead of waiting until I have it figured out, I decided I should write all the queries for the LDBC SNB Benchmark to prepare for a full run in the next few months. Now that we added “stored procedures” to RageDB, the benchmark code is trivial. I send a post request to the Lua url with the name of the query plus any parameters it may need which are in a CSV file. Here is Short Query 4 for example and they all look like this besides the different parameters:

Continue reading
Tagged , , , , , ,

Watch your Language

I was watching The Marvelous Mrs. Maisel and one of the more jarring issues of the first two episodes is that Midge keeps getting arrested for the things she says. It reminded me of the song “Me So Horny” from 2 Live Crew that landed the hip hop group in jail charged with obscenity. Record store owners were getting arrested for selling CDs to undercover cops. How insane does that all sound? But it strikes the point that language matters. The things we say and how we say them are powerful. They convey meaning and emotion, language can be pleasant or it can be foul.

Continue reading
Tagged , , , , , ,

Query Optimizers are made of sand

I’ve written a ton of SQL and Cypher queries over the last 20 years…and I’ve rewritten those queries as stored procedures more times than I can count. The issues with the expressivity of the query language and the ability of the query optimizer to “do the right thing” have been around longer than my career. I’ve written about this problem before. I went so far as to completely give up. In RageDB I let the developer write the query in a programming language directly. Skipping the “middle man” and letting the user be the query optimizer. Because in the end… this is what always happens. Well almost always.

Continue reading
Tagged , , , ,

When the demo is over

At the end of the NODES conference opening Keynote, Neo4j presents a demo of sub 20ms query performance on a graph of 11 shards, 101 shards and 1129 shards. Quite an impressive feat. Then the CEO asks “is this too good to be True?”. TLDR: Yes. Well, let’s find out why.

The “code” for the demo was released on github so we can dive in. We will start with the weirdest part of the code:

Continue reading

Getting a Mascot

Everything cool deserves an awesome mascot. Postgres has an elephant named Slonik. MySQL has a dolphin named Sakila. Linux has a Penguin named Tux. ScyllaDB has a sea monster. RedPanda has a… you guessed it, a Red Panda. Zig was too cool for one mascot so they have two “Ziguanas“. PHP has an elephant too. Rust has a Crab named Ferris. TerminusDB has a cowduck. Docker has a whale, but it was almost a giraffe. One of the most famous mascots around is the GitHub Octocat named Mona. Go has a Gopher and they even have a website where you can make your own gopher, how cool is that?

Continue reading
Tagged , , ,

30 Days of Relational AI

There was a show called “30 Days” where people would be inserted in to a lifestyle completely different from their beliefs to see what would happen. The idea wasn’t so much to change their mind, but to help them (and the viewer) understand a little bit of both sides. My experience with Declarative Query languages so far has led me to the belief that they were ultimately a performance dead end. I’ve always known more than the database, which allowed me to hand-craft high performance queries using stored procedures. Building RageDB I decided to stay away from query languages, going as far as letting you write part of your query in “c” if you wanted to.

Continue reading
Tagged , , , ,

Let’s build something Outrageous – Part 25: Dates in C++ and Faster Imports 

Back in February, we added the ability to load a CSV file and alter the contents while importing it. We also added Date support to RageDB using a Lua library. This was a masterful job of copy and paste and got us lots of functionality very quickly. When we timed the import for LDBC SNB SF10 it came in at 28 minutes. Which wasn’t bad, but wasn’t great. Let’s try to speed that up today.

Continue reading
Tagged , , , , ,

Let’s build something Outrageous – Part 24: Permissions and Multiple Graphs

Typically we want to Reduce, Reuse and Recycle to help the environment. But today we are going to Reduce, Reuse and Recycle the Lua Sandbox Environment to give us two additional sets of permissions. The first is “Read Write” in which a user can read and write to the database but cannot create new types of nodes or relationships or data types. The second is “Read Only” which does what it sounds like.

While we’re here, we’re going to one graph, two graph, rage graph, blue graph our way to multi database support. Let’s jump in:

Continue reading
Tagged , , , , , ,

Let’s build something Outrageous – Part 23: Sandboxing

The idea of using a programing language as the way to write queries against the database makes many security folks hyperventilate. In order to lower their heart-rate and slow their breathing we have to limit the queries using a technique known as “sandboxing“. The Sol2 library we are using in RageDB lets us create an “environment” where our queries will run. Let’s see how we go about doing this.

Continue reading
Tagged , , , , ,