数据存在树形的关系时存数据库好还是哪里好

2020-07-12 10:59:41 +08:00
 qq1079945484

这些数据看做是一棵树的话,深度最多是 4,根节点的直接子节点数最多是 100,其它子节点的子节点数量最多是 16 。

现在除了正常的删除和插入,查询时还要根据某一节点的 ID (除根节点)查询该节点“所对应的深度为 2 的节点”的所有子节点。(简单说就是找到某一节点的父节点,一直到深度为 2 时,再遍历出它的所有子节点)

这个数据量和场景到底是存数据库好还是内存啥的,如果不存数据库的话,数据结构是用哪种树形结构啊

3229 次点击
所在节点    程序员
11 条回复
zhengxiaowai
2020-07-12 11:24:45 +08:00
如果不是要求性能极高,建议存储到数据库

放在内存中除了老几样问题,感觉最大问题是没法扩容以及无法使用 load balance,还有就是多实例之前数据怎么同步的问题,依稀记着有人说过某滴,某个业务就是就是全部数据 load 到内存,为了获得极高的性能。

另外如果是放到内存中,就是类似于 B+树结构,深度为 2 的节点可以用链表串起来,其他没有想到更好的结构了。

还是推荐用数据库吧,这些操作实现起来都很容易关系型数据库可以看《 SQL 反模式》这本书,如果是图数据库直接撸就好,这些查询都是基本功能
qq1079945484
2020-07-12 11:32:51 +08:00
@zhengxiaowai 好的,非常感谢您的回答,我一定会去看的!
agagega
2020-07-12 12:03:32 +08:00
我记得 pg 有一个专门处理树形结构的插件,也许会做不少性能优化
buliugu
2020-07-12 13:00:45 +08:00
直接用图数据库就好了
Mithril
2020-07-12 13:04:54 +08:00
数据量少就关系型,自己处理树结构就好了。
数据量大的话可以嵌套 JSON 存文档库,能提高一部分性能。
再大就直接用图数据库了,你这都是基本操作。
zifangsky
2020-07-12 13:32:16 +08:00
可以试试图数据库——Neo4j,用起来挺简单的
qq1079945484
2020-07-12 15:40:21 +08:00
@buliugu 谢谢,我要了解一下
qq1079945484
2020-07-12 15:50:20 +08:00
@Mithril 谢谢,很好的建议,作为新手还是要多多学习一下基本操作......
qq1079945484
2020-07-12 15:53:35 +08:00
@zifangsky 好的,谢谢,我要了解一下
Kaciras
2020-07-12 21:39:30 +08:00
存关系数据库我倒是做过,给你参考下。
https://blog.kaciras.com/article/6/store-tree-in-database
vliyue
2020-07-13 16:09:48 +08:00
参考数据库设计反模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX