我正在研究Apache-Age的内部结构或架构,我知道如何在Apache-Age中创建图形,顶点或边,但我不明白它是如何在内存中分配一个graphid的。
对于图形创建:
SELECT create_graph('graph_name');
对于顶点创建:
SELECT *
FROM cypher('graph_name', $$
CREATE (n)
$$) as (v agtype);
对于边创建:
SELECT *
FROM cypher('graph_name', $$
MATCH (a:label), (b:label)
WHERE a.property = 'Node A' AND b.property = 'Node B'
CREATE (a)-[e:RELTYPE]->(b)
RETURN e
$$) as (e agtype);
现在,我很困惑,内存中发生了什么,比如图如何分配内存,然后顶点和边如何分配内存中的这些graphids。还分享了Apache-Age在存储内存中的图形数据库时使用的数据结构,以及其他属性如何被赋予graphid。
2条答案
按热度按时间wi3ka0sx1#
基于正在调用的密码查询(即第一个参数),将顶点和边分配给graphid,在后端检查并获取具有匹配图形名称的图形的对象ID并将其分配给它们。
您需要检查源代码以连接所有内容。
在您的查询中:
1-一个名为'graph_name'的图有一个唯一的对象ID,它被添加到图表表中,并存储在一个哈希表中,用于快速访问当前现有的表
2-获取名为'graph_name'的图的对象ID,并创建一个顶点,将它们连接在一起并存储它
3-做类似的事情。
AGE使用了一个自定义数据类型,名为agtype,* 是AGE* 返回的唯一数据类型。Agtype是Json的超集,是JsonB的一个custom实现。这里是使用的数据结构,也可以在github上的源代码中查看。
参考文献:
lpwwtiir2#
graphid. c文件处理graphid操作,请在此链接上查看
https://github.com/apache/age/blob/master/src/backend/utils/adt/graphid.c
它有一个
make_graphid
函数,该函数执行一个操作,该操作将始终返回相同的graphid,给定相同的参数: