这些数据看做是一棵树的话,深度最多是 4,根节点的直接子节点数最多是 100,其它子节点的子节点数量最多是 16 。
现在除了正常的删除和插入,查询时还要根据某一节点的 ID (除根节点)查询该节点“所对应的深度为 2 的节点”的所有子节点。(简单说就是找到某一节点的父节点,一直到深度为 2 时,再遍历出它的所有子节点)
这个数据量和场景到底是存数据库好还是内存啥的,如果不存数据库的话,数据结构是用哪种树形结构啊
1
zhengxiaowai 2020-07-12 11:24:45 +08:00
如果不是要求性能极高,建议存储到数据库
放在内存中除了老几样问题,感觉最大问题是没法扩容以及无法使用 load balance,还有就是多实例之前数据怎么同步的问题,依稀记着有人说过某滴,某个业务就是就是全部数据 load 到内存,为了获得极高的性能。 另外如果是放到内存中,就是类似于 B+树结构,深度为 2 的节点可以用链表串起来,其他没有想到更好的结构了。 还是推荐用数据库吧,这些操作实现起来都很容易关系型数据库可以看《 SQL 反模式》这本书,如果是图数据库直接撸就好,这些查询都是基本功能 |
2
qq1079945484 OP @zhengxiaowai 好的,非常感谢您的回答,我一定会去看的!
|
3
agagega 2020-07-12 12:03:32 +08:00 via iPhone
我记得 pg 有一个专门处理树形结构的插件,也许会做不少性能优化
|
4
buliugu 2020-07-12 13:00:45 +08:00
直接用图数据库就好了
|
5
Mithril 2020-07-12 13:04:54 +08:00
数据量少就关系型,自己处理树结构就好了。
数据量大的话可以嵌套 JSON 存文档库,能提高一部分性能。 再大就直接用图数据库了,你这都是基本操作。 |
6
zifangsky 2020-07-12 13:32:16 +08:00
可以试试图数据库——Neo4j,用起来挺简单的
|
7
qq1079945484 OP @buliugu 谢谢,我要了解一下
|
8
qq1079945484 OP @Mithril 谢谢,很好的建议,作为新手还是要多多学习一下基本操作......
|
9
qq1079945484 OP @zifangsky 好的,谢谢,我要了解一下
|
10
Kaciras 2020-07-12 21:39:30 +08:00 1
存关系数据库我倒是做过,给你参考下。
https://blog.kaciras.com/article/6/store-tree-in-database |
11
vliyue 2020-07-13 16:09:48 +08:00
参考数据库设计反模式
|