Improving Performance with Flame Graphs
Max De Marzi Blog
by maxdemarzi
1y ago
Yes, I’m slowly but surely getting on the generative AI bandwagon. The eye catching image above was generated in Lexica, it’s not perfect but our mind tricks us into accepting it. I am not a fan of asking these new AI systems questions and getting answers that only look like correct answers… but we’re not talking about that today. Instead we’ll be looking at improving the performance of RageDB using “perf” and “FlameGraphs“. Which really should have been called “FlameCharts” since it’s a chart not a graph but let’s not go there either. Let’s take a look at the first LDBC SNB Interactive Short ..read more
Visit website
RageDB needs Worst-Case Optimal Joins
Max De Marzi Blog
by maxdemarzi
1y ago
In this blog post, KuzuDB creator Semih Salihoğlu makes the case that graph databases need new join algorithms. If you’ve read the blog post and came away still a bit confused then look at the image above. This image shows what happens when you try to join 3 tables. The problem is that traditionally databases have used binary joins (two tables at a time) to execute queries. The intermediate result build up of these joins can get massive and eat a ton of memory and processing power. The more binary joins you have, the worse it gets. In a wcoj, we join more than 2 tables at a time. Follow along ..read more
Visit website
Bullshit Graph Database Performance Benchmarks
Max De Marzi Blog
by maxdemarzi
1y ago
How is the Graph Database category supposed to grow when vendors keep spouting off complete bullshit? I wrote a bit about the ridiculous benchmark Memgraph published last month hoping they would do the right thing and make an attempt at a real analysis. Instead these clowns put it on a banner on top of their home page. So let’s tear into it. At first I considered replicating it using their own repository, but it’s about 2000 lines of Python and I don’t know Python. Worse still, the work is under a “Business Source License” which states: “Authorised Purpose” means any of the following, provid ..read more
Visit website
Death Star Queries in Graph Databases
Max De Marzi Blog
by maxdemarzi
1y ago
In Cypher, we call any unbounded star query a “Death Star” query. You’ll recognize it if you see a star between two brackets in any part of the query: -[*]- the deadly pattern of a death star query The “star” in Cypher means “keep going”, and when it is not bound by a path length -[*..3]- or relationship type(s) -[:KNOWS|FRIENDS*]- it tends to blow up Alderaaning servers. It’s hard to find a valid reason for this query, but its less deadly cousins are very important in graph workloads. For example when looking at fraud, we may start with a Customer node and ask, which known Fraudulent nodes ..read more
Visit website
KHop Baby One More Time
Max De Marzi Blog
by maxdemarzi
1y ago
Some of the most beloved songs by main stream artists were written by Max Martin. The song “Baby One More Time” came out in 1999 and sold over 10m copies. It propelled Britney Spears into pop stardom. If we were to look at the graph above, with Max Martin in the center, then one hop away are the songs he wrote which would become #1s on the Billboards Hot 100. Two hops away are the Artists that performed those #1 songs. It is beyond question that Max Martin knows how to write good pop songs. I wish I had his talent. I only know how to write half way decent KHop implementations. The way the alg ..read more
Visit website
Observations of the LDBC SNB Benchmark
Max De Marzi Blog
by maxdemarzi
2y ago
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: def request: HttpRequestBuilder ..read more
Visit website
Watch your Language
Max De Marzi Blog
by maxdemarzi
2y ago
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. Like many people, I didn’t r ..read more
Visit website
Query Optimizers are made of sand
Max De Marzi Blog
by maxdemarzi
2y ago
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 alm ..read more
Visit website
When the demo is over
Max De Marzi Blog
by maxdemarzi
2y ago
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?”. Well, let’s find out. TLDR: Yes. The “code” for the demo was released on github so let’s dive in. Let’s start with the weirdest part of the code: if (configStore.isNonMockedDataSource()) { const session = conn.driver.session({ defaultAccessMode: neo4j.session.READ, database: query.db }); const result = await session.run(query.query, query.params ..read more
Visit website
Getting a Mascot
Max De Marzi Blog
by maxdemarzi
2y ago
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? Unfortunately n ..read more
Visit website

Follow Max De Marzi Blog on FeedSpot

Continue with Google
Continue with Apple
OR