一个大的二叉树,树层级是不确定,现在要实现这么几个需求:
1.记录层级关系。比如:给你一个节点id:9,需要查询出这个节点下的儿子或者孙子,或者....或者所有子孙节点
2.还要一下查询统计需求
对于需求1,我这边是讲节点id存储到redis里面,结构是zset, key是节点id,score是层级关系,如果是儿子节点,score就是-1,孙子就是-2,以此内推。。层级无限,有可能很多层。越往后的score越小。
但是这样存储有一个问题,就是查询统计需求就不太好弄了,比如,我需要查询出某个节点下的所有当天新增的节点。这类需求,目前我想到的就是从redis拿到当前节点下的所有子孙节点id,然后通过id去数据库里面通过in过滤出当天的新增节点,这样有一个问题,就是如果子孙节点太多,in查询效率非常低,服务会挂。
不知道大家谁有没有好一点的方案?目前在研究Neo4j,这个图形数据库,不知道能不能实现这样的需求?有大神使用过吗?
你的需求看不出要用redis的理由,可以简单的使用关系型数据库实现树形层级关系,使用某个字段保存父子路径关系。比如 root 1 , 有两个节点 , 1-2-,1-3-; 2,3又有儿子节点 1-2-4-,1-3-5-,那么统计只要简单的like 就可以方便的拿到本节点的所有子孙节点,比如查询 path like '1-%',即为拿到id=1的所有子孙节点,path like '1-2-%'即为拿到id=2的所有子孙节点。