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