V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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

基于 Mysql,如何实现回收站功能呢?求赐教

  •  
  •   SjwNo1 · 2020-12-30 14:05:38 +08:00 · 3236 次点击
    这是一个创建于 1205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    设计一个 web 端的回收站,用户可以删除文件 /文件夹放入回收站,回收站内可销毁 /复原 文件 /文件夹

    当前的设计

    文件,文件夹,回收站都有单独的表,路径 path 都有记录

    遇到的问题

    文件 /文件夹复原的时候复杂度特别高,需要检验原始路径-->再生缺失的文件夹-->合并 等等步骤,总的来说已经理不清思路了。。。

    有实现过类似功能的 v2er 吗,给点建议什么的,感激不尽

    第 1 条附言  ·  2020-12-30 14:43:13 +08:00

    设计成这样是因为考虑到以下几点

    1. 复原文件夹时需要准确还原,意思是如果有包含关系的两次删除记录,不能全量还原,因此需要记录删除的文件/文件夹的id
    2. 回收站表记录了删除时的完整路径用于还原时再生路径的需求
    23 条回复    2021-01-04 18:08:31 +08:00
    974879409
        1
    974879409  
       2020-12-30 14:17:51 +08:00   ❤️ 1
    ”文件,文件夹“ 加个是否已删除的状态,假性删除如何
    liyanggyang
        2
    liyanggyang  
       2020-12-30 14:19:27 +08:00   ❤️ 1
    直接 写个脚本 删除功能使用 mv 移动到“回收站”(服务器目录:/xxx ) 回收站里面删除 使用 rm, 可?
    liyanggyang
        3
    liyanggyang  
       2020-12-30 14:21:47 +08:00   ❤️ 1
    文件 /文件夹复原的时候复杂度特别高,需要检验原始路径-->再生缺失的文件夹-->合并 等等步骤,总的来说已经理不清思路了。。。
    ----
    这个问题,我觉得产品设计换个角度吧,比如 如果原始路径存在,那么直接回复到原始,如果不存在,那么用户选择一个路径
    Latin
        4
    Latin  
       2020-12-30 14:22:31 +08:00   ❤️ 1
    加回收站表就是浪费,1 楼建议 ok 的 软删除状态即可
    SjwNo1
        5
    SjwNo1  
    OP
       2020-12-30 14:25:40 +08:00
    @974879409 @Latin 当初也想这么嫩,考虑到父级文件夹会 被移动 /重命名 /删除 等情况才设计如此
    SjwNo1
        6
    SjwNo1  
    OP
       2020-12-30 14:27:59 +08:00
    @liyanggyang 定下的需求是 如有重复会让用户选择是否保留两者或跳过
    pixiaotiao
        7
    pixiaotiao  
       2020-12-30 14:29:59 +08:00 via Android   ❤️ 1
    @SjwNo1 再怎么操作 ,父级 id 不会变吧
    Lemeng
        8
    Lemeng  
       2020-12-30 14:33:31 +08:00   ❤️ 1
    自己建一个,意思到了就行
    SjwNo1
        9
    SjwNo1  
    OP
       2020-12-30 14:37:53 +08:00
    @pixiaotiao 父级 id 是不会变哈,但是父级被移动了我还原的时候不能跟着它走
    jjianwen68
        10
    jjianwen68  
       2020-12-30 14:46:07 +08:00   ❤️ 1
    删除(到回收站)只是改个状态;清空回收站(或者直接选择彻底删除-不可恢复)才彻底删除文件。一般应该这样设计吧
    liyanggyang
        11
    liyanggyang  
       2020-12-30 14:52:48 +08:00   ❤️ 1
    @SjwNo1 其实我觉得很简单,直接操作你的操作系统怎么做的,这个最符合人的使用习惯,如果不符合,那就产品经理自行背锅(给出完整逻辑,应该怎么办)
    SjwNo1
        12
    SjwNo1  
    OP
       2020-12-30 14:57:45 +08:00
    @jjianwen68 是的,一般这样就感觉足够了,无奈产品无脑,看到什么想做成什么样。。
    974879409
        13
    974879409  
       2020-12-30 14:57:50 +08:00
    974879409
        14
    974879409  
       2020-12-30 14:58:55 +08:00   ❤️ 1
    @974879409 @Latin 当初也想这么嫩,考虑到父级文件夹会 被移动 /重命名 /删除 等情况才设计如此
    --------------------
    文件(夹)之间的父子级别关系,和每个文件的"删除"状态没关系
    jintianfengda
        15
    jintianfengda  
       2020-12-30 15:05:29 +08:00   ❤️ 1
    你父子级关系跟逻辑删除没关系啊,最多就是恢复的时候判断一下名称重复?是不是被产品经理给绕进去了:P
    SjwNo1
        16
    SjwNo1  
    OP
       2020-12-30 15:09:08 +08:00
    @974879409 可能我表述的不准确,可是还原的时候很有可能会发生 状态还原但路径未还原,假设现有 /A/B/C,先删 B,再删 A,状态都为“已删除”,这时还原 B 应该需要很多操作哈 (不知道我想的对不对)
    Latin
        17
    Latin  
       2020-12-30 15:15:06 +08:00   ❤️ 1
    层级关系不是应该有对照表吗,按对照表次序来还原是不是没那么复杂了。。。
    SjwNo1
        18
    SjwNo1  
    OP
       2020-12-30 15:21:01 +08:00
    @Latin 我打算一个个还原了,不做事件级的还原,谢谢老哥
    preach
        19
    preach  
       2020-12-30 18:26:30 +08:00   ❤️ 1
    1. 数据库软删除
    2. dot 也就 是 . 软删除
    abigeater
        20
    abigeater  
       2020-12-30 18:42:46 +08:00   ❤️ 1
    我的理解
    放入回收站 = 软删除(数据状态变更)
    彻底删除 = 数据库记录删除
    恢复过程拿出该条记录 做对应处理就好了吧 产品说要合并就合并 要改回路径就改回路径 按看你说法 恢复时如果目录不存在 就创建一个 那么记录里应该有删之前的目录快照(类似 没有就整一个)

    如果要跟踪目录更改的话 原来的目录如果被改变了理应这条记录的路径也应该存储(但是快照保留旧的)
    SjwNo1
        21
    SjwNo1  
    OP
       2020-12-31 09:39:51 +08:00
    @abigeater 我发现这样也是可以的,不管用哪种方式,还原的时候都需要经历复杂的逻辑。。 谢谢老哥
    shanghai1943
        22
    shanghai1943  
       2020-12-31 17:26:09 +08:00   ❤️ 1
    试了一下,在 Macos 下,先删子目录后删父目录,然后想恢复子目录的时候发现没反应。。
    SjwNo1
        23
    SjwNo1  
    OP
       2021-01-04 18:08:31 +08:00
    @shanghai1943 产品看了 win 的效果然后要批量还原。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1175 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:11 · PVG 07:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.