首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入/更新高效解决方案,在MySQL中存储分层数据?

插入/更新高效解决方案,在MySQL中存储分层数据?
EN

Stack Overflow用户
提问于 2017-01-05 17:11:10
回答 1查看 557关注 0票数 0

据我所知,在关系数据库中存储分层数据有几种模式,例如使用邻接列表、嵌套集等。

但是,与嵌套集类似的缺点是,如果经常需要通过添加/删除子节点来更新节点,那么更新表的其余部分将花费很大的成本。

场景的解决方案是什么,如下面的示例:

代码语言:javascript
复制
                 (Parent1)
               /     |      \
         (Child1) (Child2)  (Child3)
         /           |
[Child1a, Child1b][Child2a] 

在经常需要更新如下内容时:

代码语言:javascript
复制
              (Parent1)
               /     |      \
         (Child1) (Child4)  (Child5)
         /           |         \
   [Child1a, Child1b][Child4a] [Child5a]

等。

我的数据最多嵌套在3个层次,但其思想是,该解决方案应该支持存储在表中的许多小树,并且可以以性能良好的方式更新/修改子树。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 22:25:10

在存储和更新复杂性方面,最便宜的存储层次数据的方法是邻接列表。

  • 定义子对象的父更新,确切地说是一行
  • 将子对象移动到新父级时,只更新1行。
  • 删除N个节点的子树就是删除N个行
  • 添加N个节点的子树是插入N个行

其他技术,如嵌套集或路径枚举或闭包表,需要更复杂的更新,但折衷的是,这些技术支持任意深度的操作,而不需要递归查询语法。

如果您能够保证树的深度永远不超过三个级别,那么您可以使用几个简单的外部联接使用邻接列表来执行许多操作。

请注意,MySQL 8.0实现递归查询语法,因此变通技术在未来可能变得不那么必要了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41490838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档