MariaDB [imdb]> show status like "Innodb_rows_read"; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | Innodb_rows_read | 1237459 | +------------------+---------+ 1 row in set (0.00 sec) MariaDB [imdb]> select x.* from entity as orig, entity as dest, imdb_graph, entity as x where dest.type='ACTOR' and dest.name='Kevin Bacon' and imdb_graph.latch=2 and imdb_graph.origid=orig.id and imdb_graph.destid=dest.id and x.id=imdb_graph.linkid and orig.type='ACTOR' and orig.name='James Earl Jones'; +---------+---------+------------------------------------------------------------------+ | id | type | name | +---------+---------+------------------------------------------------------------------+ | 780890 | ACTOR | James Earl Jones | | 1922997 | ARCHIVE | "20 to 1" (2005) {Our All Time Favourite Films (#9.11)} (voice) | | 131965 | ACTOR | Antonio Banderas | | 1945521 | ARCHIVE | Oscar, que empiece el espect?culo (2008) | | 1003551 | ACTOR | Kevin Bacon | +---------+---------+------------------------------------------------------------------+ 5 rows in set (2.80 sec) MariaDB [imdb]> show status like "Innodb_rows_read"; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | Innodb_rows_read | 2102482 | +------------------+---------+ 1 row in set (0.00 sec) MariaDB [imdb]> select (2102482 - 1237459)/2.8; +-------------------------+ | (2102482 - 1237459)/2.8 | +-------------------------+ | 308936.7857 | +-------------------------+ 1 row in set (0.09 sec)
Over 300,000 edges examined per second... Nifty.
The entity table has approximately 3 million entries and the link table has approximately 30 million edges.
Note - this performance is with a warmed up buffer pool. With a cold buffer pool, the query takes nearly 30 seconds.
2 comments:
I don't get it. OQgraph used to be memory only? So what is this InnoDB-thing?
The "Innodb thing" is that it supports persistant graphs. The edge traversal data is still held in memory but in a more efficient way to support large graphs. In order to support persistant graphs, the edge data is stored in a donor table, which may be Innodb or any other storage engine which supports ordered index.
Post a Comment