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

2020-10-27 15:33:02 +08:00
 SjwNo1

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

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

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

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

- 0
- - 1
- - - 2

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

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

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

随便想的,提供个思路,不一定靠谱。可以去下载几个有名的文件管理项目代码来看看他们怎么设计的,抄过来比较一下效率再决定怎么做。
sivacohan
2020-10-27 16:31:47 +08:00
复制没什么好办法,你肯定会对目录树做一个 BFS 或者 DFS 。
对应概念上可以参考深拷贝和浅拷贝。
SjwNo1
2020-10-27 16:37:43 +08:00
@eason1874 我现在的设计和你想的一模一样,只是复制不同于移动(剪切),移动只要修改左前缀和 parent_id,但是复制需要生成新的 文件夹和文件,整个 parent_path 都需要修改
谢谢老哥,我去查找一下
SjwNo1
2020-10-27 16:40:53 +08:00
@sivacohan 是的,很苦恼啊哈哈,我去研究一下,谢谢
wellsc
2020-10-27 16:41:42 +08:00
我以为是操作系统的文件系统
SjwNo1
2020-10-27 16:45:03 +08:00
@wellsc 是文件管理的哈哈
keygen88
2020-10-27 16:48:39 +08:00
@SjwNo1 文件系统->目录结构,可以做个映射关系,映射一下就行了
SjwNo1
2020-10-27 17:05:57 +08:00
@keygen88 在下天资愚钝,欲求大佬细说
SjwNo1
2020-10-28 15:29:28 +08:00
别沉 ^ -^

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

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

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

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

© 2021 V2EX