V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq1079945484
V2EX  ›  程序员

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

  •  
  •   qq1079945484 · 2020-07-12 10:59:41 +08:00 · 2988 次点击
    这是一个创建于 1355 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    11 条回复    2020-07-13 16:09:48 +08:00
    zhengxiaowai
        1
    zhengxiaowai  
       2020-07-12 11:24:45 +08:00
    如果不是要求性能极高,建议存储到数据库

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

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

    还是推荐用数据库吧,这些操作实现起来都很容易关系型数据库可以看《 SQL 反模式》这本书,如果是图数据库直接撸就好,这些查询都是基本功能
    qq1079945484
        2
    qq1079945484  
    OP
       2020-07-12 11:32:51 +08:00
    @zhengxiaowai 好的,非常感谢您的回答,我一定会去看的!
    agagega
        3
    agagega  
       2020-07-12 12:03:32 +08:00 via iPhone
    我记得 pg 有一个专门处理树形结构的插件,也许会做不少性能优化
    buliugu
        4
    buliugu  
       2020-07-12 13:00:45 +08:00
    直接用图数据库就好了
    Mithril
        5
    Mithril  
       2020-07-12 13:04:54 +08:00
    数据量少就关系型,自己处理树结构就好了。
    数据量大的话可以嵌套 JSON 存文档库,能提高一部分性能。
    再大就直接用图数据库了,你这都是基本操作。
    zifangsky
        6
    zifangsky  
       2020-07-12 13:32:16 +08:00
    可以试试图数据库——Neo4j,用起来挺简单的
    qq1079945484
        7
    qq1079945484  
    OP
       2020-07-12 15:40:21 +08:00
    @buliugu 谢谢,我要了解一下
    qq1079945484
        8
    qq1079945484  
    OP
       2020-07-12 15:50:20 +08:00
    @Mithril 谢谢,很好的建议,作为新手还是要多多学习一下基本操作......
    qq1079945484
        9
    qq1079945484  
    OP
       2020-07-12 15:53:35 +08:00
    @zifangsky 好的,谢谢,我要了解一下
    Kaciras
        10
    Kaciras  
       2020-07-12 21:39:30 +08:00
    存关系数据库我倒是做过,给你参考下。
    https://blog.kaciras.com/article/6/store-tree-in-database
    vliyue
        11
    vliyue  
       2020-07-13 16:09:48 +08:00
    参考数据库设计反模式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2400 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:10 · PVG 00:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.