没事想写写小项目熟悉一下 go 语言,就想到写一个不像网盘的网盘。。。 需求特别简单。。。就能上传下载文件,把目录,文件列表展示出来就行。 目前想到的数据库表设计是这样的
不考虑其他复杂的情况,这个设计可以吗,求各位大神指点
1
cmdOptionKana 2020-10-04 23:37:53 +08:00
假设有一个目录 /工作 /项目 A/重要 /
另外有一个目录 /工作 /项目 B/重要 / 如果你要列出项目 B 的重要文件夹下的全部文件,怎么查询?感觉你现在的结构不太好操作。 可以考虑目录用完整路径,也就是直接把 “/工作 /项目 A/重要 /” 字符串作为目录,不需要父目录。 |
2
cmdOptionKana 2020-10-04 23:46:22 +08:00
另外可以考虑增加一个“删除时间”,用来实现垃圾桶功能,也就是说删除时仅标记删除时间,放在垃圾桶里,让用户后悔的机会。(当然,这个功能可以等后面有时间再做,反正先把删除时间安排上,日后想加垃圾桶功能就不需要改表了)
文件类型可以考虑采用 MIME 标准,参考 https://developer.mozilla.org/zh-CN/docs/Glossary/MIME_type 另外,可能还需要 id 和文件名。 |
3
Vneix 2020-10-04 23:50:55 +08:00 via Android
|
4
Akkuman 2020-10-05 00:21:45 +08:00 via Android
建议真实文件数据专门加一层抽象出来
|
5
zxCoder OP @cmdOptionKana
我的目录字段指的就是说完整目录,比如你举得这个例子,我会存 /工作 /工作 /项目 A /工作 /项目 B /工作 /项目 A/重要 /工作 /项目 B/重要 /工作 /项目 A/重要 /文件 A.jpg 父目录为 /工作 /项目 A/重要 /工作 /项目 B/重要 /文件 B.jpg 父目录为 /工作 /项目 B/重要 这样子,所以如果我想查项目 B 重要文件夹下的所有文件,我就得全表查父目录为 /工作 /项目 B/重要 的所有项了,好像效率会比较低 |
7
love 2020-10-05 09:31:11 +08:00 via Android
既然是简单的网盘,为啥不用实际的文件系统呢,根本不需要数据库,直接读文件列表就行了
|
8
angryfish 2020-10-05 12:08:02 +08:00 via iPhone
不用想那么多,直接干就是了,做的过程中发现问题再改
|
11
baobao1270 2020-10-08 10:41:19 +08:00 via Android
可以试试这样设计
int id, string key, string sha256 三个字段够了,目录和文件名合并为 key,查找时用 LIKE path% 语句查询 key 前缀即可,然后所有文件都保存在同一目录下并以 sha256 命名,不要带后缀名,形如 /path/to/files/(sha256)。文件的类型可以使用第三方库根据后缀名或文件内容推断,文件类型与大小直接用 fs api 读取,数据库里没必要冗余储存。如果确实需要冗余储存建议上 redis |