在《图形数据库》(O'Reilly书籍)第六章中,该章节讲述了Neo4j的图形数据库存储方式:
为了理解本地图形处理为什么比基于重型索引的图形更加高效,请考虑以下问题。根据实现方式,索引查找在算法复杂度上可能是O(log n),而直接查找相邻关系则是O(1)。对于遍历m步网络,索引方法的代价为O(m log n),而使用无索引邻接表的实现则仅为O(m)。
因此Neo4j通过将所有节点和关系作为固定大小记录来实现常数时间查找:
使用固定大小的记录和指针式记录ID,遍历只需要在数据结构中跟踪指针即可,这可以非常高速地完成。要从一个节点到另一个节点遍历特定的关系,数据库执行几个廉价的ID计算(这些计算比在非图形本地数据库中伪造图形时必须执行的全局索引搜索要便宜得多)。
最后一句话引发了我的问题:Titan如何利用Cassandra或HBase作为存储后端实现这些性能提升或弥补它的不足呢?
为了理解本地图形处理为什么比基于重型索引的图形更加高效,请考虑以下问题。根据实现方式,索引查找在算法复杂度上可能是O(log n),而直接查找相邻关系则是O(1)。对于遍历m步网络,索引方法的代价为O(m log n),而使用无索引邻接表的实现则仅为O(m)。
因此Neo4j通过将所有节点和关系作为固定大小记录来实现常数时间查找:
使用固定大小的记录和指针式记录ID,遍历只需要在数据结构中跟踪指针即可,这可以非常高速地完成。要从一个节点到另一个节点遍历特定的关系,数据库执行几个廉价的ID计算(这些计算比在非图形本地数据库中伪造图形时必须执行的全局索引搜索要便宜得多)。
最后一句话引发了我的问题:Titan如何利用Cassandra或HBase作为存储后端实现这些性能提升或弥补它的不足呢?