关于树形结构的使用问题
我所知道的常用的树形结构有以下几种:1、用FParentNodeId来表示父子关系,而这种关系最大的弊病就是一旦要查找某个非根节点的所有子孙节点,就要逐层遍历数,效率很低。
2、用左右值编码的方式,即模拟树的遍历,给每个节点设置左右值,通过对左右值的查询可以快速的查询到任意级次的所有子孙节点,但是这也有一个非常大的问题,就是一旦业务数据频繁变动,每次可能就会大面积的更新节点的左右值,并发时要考虑数据的一致性,以及会有堵塞甚至死锁的风险。
3、使用长编码的方式,也就是说每层有一个编码,层之间使用分隔符分开,查询子孙节点时,可以使用 like '1001$1002%'的方式,这种缺点是层级不好确定,所以字段长度不好确定,而且过长的字段增加索引时也会影响效率。
我的需求是,一个节点下可能会有N个子节点,每个子节点下可能也会N多个子节点,层级不限,现在就想快速查找到每个节点的所有子孙节点,并且这个树形结构对应的业务数据会发生频繁的变动,譬如删除某个分支下的所有节点,增加节点,移动节点等。请问有没有更好用的树形结构?