A couple of days ago I wrote about one of my forays into MDX land
(Retrieving denormalized tabular results with
MDX). The topic of that post was how to write MDX so as to
retrieve the kind of flat, tabular results one gets from SQL
queries. An essential point of that solution was the MDX
Ancestor()
function.
I stumbled upon the topic of my previous blogpost while I was
researching something else entirely. Creating flat tables and
looking up individual ancestors is actually a rather specific
application of a much more general solution I found initially.
Pivot tables and the "Show Parents" functionalityGUI OLAP tools
typically offer a pivot table query interface. They let you drag
and drop measures and dimension items, like …
From time to time we detect query patterns that are not well fitted to the BTree+ structures provided by InnoDB. One such situation is when you need to traverse a hierarchy (tree) or graph structure with many nodes. Specialist databases exist for this such as Neo4J. However there exists a simple solution in the form of OQGraph which is distributed with MariaDB and is documented here.
The OQGRAPH engine is based on an original idea by Open Query founder Arjen Lentz, and was developed in-house with Antony Curtis at Open Query.
A …
[Read more]Antony has done a bit of magic, considerably speeding up inserts. Since the base implementation does not have persistence, insert speed is particularly important. Copying the 2×89,051 edges for the Tree-of-Life example is now near-instant.
The delete bug has been fixed.
There’s a new Maze example in the OQGRAPH trunk on Launchpad, first introduced in my MySQL University session. I created/inserted a maze of 1 million rooms (that comes to about 3 million edges), and OQGRAPH found the shortest path (122330 steps for this particular maze) in abound one second. That’s pretty good, I think!
Last but not least, the …
[Read more]Antony and I are busy getting the Open Query GRAPH Engine code ready so you all can play with it, but we needed to test with a larger dataset to make sure all was fundamentally well with the system.
We have some intersting suitable dataset sources, but the first we tried in ernest because it was easy to get in (thanks to Roland Bouman for both the idea and providing xslt stylesheets to transform the set), was the Tree of Life which is a hierarchy of 89052 entries showing how biological species on earth are related to eachother.
GRAPH engine operates in a directed fashion, so I inserted the connections both ways resulting in 178102 entries. So, I inserted A->B as well as B->A for each connection. So we now have a real graph, not just a simple tree.
Just like with my previous post, we have a separate …
[Read more]The GRAPH engine allows you to deal with hierarchies and graphs in a purely relational way. So, we can find all children of an item, path from an item to a root node, shortest path between two items, and so on, each with a simple basic query structure using standard SQL grammar.
The engine is implemented as a MySQL/MariaDB 5.1 plugin (we’re working on a 5.0 backport for some clients) and thus runs with an unmodified server.
Demo time! I’ll simplify/strip a little bit here for space reasons, but what’s here is plain cut/paste from a running server, no edits
-- insert a few entries with connections (and multiple paths) insert into foo (origid, destid) values (1,2), (2,3), (2,4), (4,5), (3,6), (5,6); -- a regular table to join on to insert into people values (1,"pearce"),(2,"hunnicut"),(3,"potter"), …[Read more]