扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎样在 MySQL 表中存储树形结构数据 做无限级联存储就可以了, 记录每一个节点的父节点, 如果有必要可以记录节点路径
萨嘎网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
查看树插入删除图解:
时间复杂度:O(N)
时间复杂度:O(logn)
如果数据插入是递增或者递减顺序的话,会使树成为链式结构。 时间复杂度:O(N)
为了保证平衡,在插入或者删除的时候必须要旋转,通过插入或者删除性能的损失来弥补查询性能的提升。
但如果写请求和读请求一样多的时候怎么办?
随着数据的插入,树的深度会变深,树的深度越深,意味着 IO 次数越多。影响数据读取的效率。
MySQL 的页大小是16k。假设只有data 占用空间且占用 1k 一个磁盘块可以放置16条记录,三层就是 4096条记录。肯定小于 4096.
如果想要放入更多的数据的化,得加层。加层 IO 量肯定上来了。
data 太占内存,导致存储数据太少。
MySQL加载索引是以磁盘块(页)为单位的,页(Page)是 Innodb 存储引擎用于管理数据的最小磁盘单位。默认的页大小为 16KB。
假设只有 p1+key 值 占用空间且占用 10字节, 一个磁盘块可以放置1600条记录,三层就是 40960000条记录。
在B+树 上有两个头节点,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有的叶子节点(即数据节点)之间是一种链式环结构,因此可以对 B+树 进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。
让当前key值尽可能的少占用存储空间,才能保证存储更多的值。降低树的高度,减少IO。
保证key的长度越小越好。
在二叉树中有一种平衡二叉树,通过平衡算法可以让二叉树两边的节点平均分布,这样就能让所有的索引查找都在一个近似的时间内完成。而MySQL这类数据库采用了二叉树的升级版B+Tree的形式,每个节点有三个支叶,不过其算法原理仍然是平衡树的原理。
解决方法很多!数据要存储为树形结构,那么数据要有父子关系。 一个父节点有多个子节点,一个子节点又有多个子子节点。 publicclassTreeNode{ /**节点主键**/ privateStringid; /**节点名称**/ privateStringtext; /**子节点**/ privateTreeNode[]children; }
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流