我刚开始尝试使用Neo4j,如果这是一个简单的概念,请谅解...
我正在构建一个相对较大的家庭信息数据库(几百万个节点,每个节点大约有5-15个属性)。目前,所有数据都存储在mysql数据库中,使用Redis作为缓存层,但我正在尝试用Neo4j替换Redis,以帮助加速一些更昂贵的查询(最终将Neo4j用作主要数据存储而不是mysql)。
我正在尝试将所有节点及其属性存储在Neo4j中,并通过HAS_FATHER
和HAS_MOTHER
关系连接它们。这是一个好方法吗?使用HAS_PARENT
并在每个关系上设置parent_type
属性(father或mother)会更有益吗?我是否还应该在所有父母上保存一个反向关系HAS_CHILD
?我的选项有哪些优缺点?
其次,假设我正在使用HAS_FATHER
和HAS_MOTHER
关系,那么获取所有直系祖先(家谱)7代的所有节点、属性和关系的最佳查询是什么?以下是我目前正在使用的一个示例查询,但我对Cypher不熟悉,也不太熟悉瓶颈、优化等。
MATCH tree = (c)-[:HAS_FATHER|HAS_MOTHER*0..7]->(p)
WHERE c.id = 29421
RETURN nodes(tree), rels(tree)
任何帮助或提示将不胜感激。谢谢!