› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
SjwNo1
V2EX  ›  MySQL

再一次卡在了文件系统设计,求救大佬

  •  
  •   SjwNo1 · Oct 27, 2020 · 4486 views
    This topic created in 2160 days ago, the information mentioned may be changed or developed.

    上次采用了 V2 老哥的建议,设计了类似于文件夹的模型

    当前的设计为存储 文件夹 /文件 全路径:
    如:
    /folder_1/folder_2/...
    /folder_3/file_1
    /folder_4/file_5

    目前遇到的问题:(深层)文件夹复制的时候需要先找出子文件夹及其相关联的文件,再做分配,这样效率好低
    希望得到 V2 大佬的建议,感谢 🙏

    Supplement 1  ·  Oct 28, 2020
    还是没解决。。。
    19 replies  •  2020-10-28 15:29:28 +08:00
    THESDZ
        1
    THESDZ  
       Oct 27, 2020
    不太懂业务情况
    但是如果是我设计,对外的路径只是一个假的,真实的路径是不会发生变化的
    THESDZ
        2
    THESDZ  
       Oct 27, 2020
    @THESDZ 目前来说,我经历的项目如果需要存文件都是使用对象存储的,数据库只存一个地址
    SjwNo1
        3
    SjwNo1  
    OP
       Oct 27, 2020
    @THESDZ 文件的物理位置不做改变,只是表上的数据需要批量复制,路径要批量分配
    THESDZ
        4
    THESDZ  
       Oct 27, 2020
    @SjwNo1 如果是需要提升查询效率,可以建立一个字段,存储所有的父级 id,不过这样会提升写的难度,降低写的效率,看取舍
    THESDZ
        5
    THESDZ  
       Oct 27, 2020   ❤️ 2
    @SjwNo1 顺带,建议不要写什么大佬大佬的,你这样一架,那还有人敢进来啊,也就我这样没脸没皮的敢瞎 JB 指定江山,就请问各位,巴拉巴拉就行
    kkbblzq
        6
    kkbblzq  
       Oct 27, 2020
    子目录本身不就是前缀一致的吗,有啥问题。。。直接左匹配不行吗。。
    SjwNo1
        7
    SjwNo1  
    OP
       Oct 27, 2020
    @THESDZ 是的 我目前就是这样设计的,每个文件夹节点都有 parent_id, 但是当文件夹复制的时候,感觉仍然避免不了递归查找
    THESDZ
        8
    THESDZ  
       Oct 27, 2020   ❤️ 1
    @SjwNo1 我的意思是

    - 0
    - - 1
    - - - 2

    那么 2 会有个字段存储 0,1 既有顺序,也有树状结构描述
    SjwNo1
        9
    SjwNo1  
    OP
       Oct 27, 2020
    @kkbblzq 子目录下 路径左前缀确实是一致的,文件夹复制过去之后,内部的所有文件夹和文件的路径都需要改变啊
    kkbblzq
        10
    kkbblzq  
       Oct 27, 2020   ❤️ 1
    @SjwNo1 不是很了解你业务怎么样的,通过左前缀匹配不就可以找到所有文件和目录了。然后替换一下路径,换一下最顶层的父节点不就完事了。。
    eason1874
        11
    eason1874  
       Oct 27, 2020   ❤️ 1
    实在不行用空间换时间呗,继续有 parent_id 表示上下级关系,再加一个字段 parent_path 表示上级位置。

    比如,一级目录的上级路径为空,二级是 1,三级是 1/2,四级是 1/2/3,这些数字是上级目录 ID,文件跟目录一样,也有这个字段。

    当你移动四级目录下的内容到三级的时候,就查找 parent_path=1/2/3,然后修改 parent_id=2,parent_path=1/2

    随便想的,提供个思路,不一定靠谱。可以去下载几个有名的文件管理项目代码来看看他们怎么设计的,抄过来比较一下效率再决定怎么做。
    sivacohan
        12
    sivacohan  
       Oct 27, 2020 via iPhone   ❤️ 1
    复制没什么好办法,你肯定会对目录树做一个 BFS 或者 DFS 。
    对应概念上可以参考深拷贝和浅拷贝。
    SjwNo1
        13
    SjwNo1  
    OP
       Oct 27, 2020
    @eason1874 我现在的设计和你想的一模一样,只是复制不同于移动(剪切),移动只要修改左前缀和 parent_id,但是复制需要生成新的 文件夹和文件,整个 parent_path 都需要修改
    谢谢老哥,我去查找一下
    SjwNo1
        14
    SjwNo1  
    OP
       Oct 27, 2020
    @sivacohan 是的,很苦恼啊哈哈,我去研究一下,谢谢
    wellsc
        15
    wellsc  
       Oct 27, 2020
    我以为是操作系统的文件系统
    SjwNo1
        16
    SjwNo1  
    OP
       Oct 27, 2020
    @wellsc 是文件管理的哈哈
    keygen88
        17
    keygen88  
       Oct 27, 2020   ❤️ 1
    @SjwNo1 文件系统->目录结构,可以做个映射关系,映射一下就行了
    SjwNo1
        18
    SjwNo1  
    OP
       Oct 27, 2020
    @keygen88 在下天资愚钝,欲求大佬细说
    SjwNo1
        19
    SjwNo1  
    OP
       Oct 28, 2020
    别沉 ^ -^
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2596 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 05:39 · PVG 13:39 · LAX 22:39 · JFK 01:39
    ♥ Do have faith in what you're doing.