› 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 · Dec 30, 2020 · 4697 views
    This topic created in 2096 days ago, the information mentioned may be changed or developed.

    需求

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

    当前的设计

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

    遇到的问题

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

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

    Supplement 1  ·  Dec 30, 2020

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

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

    如果要跟踪目录更改的话 原来的目录如果被改变了理应这条记录的路径也应该存储(但是快照保留旧的)
    SjwNo1
        21
    SjwNo1  
    OP
       Dec 31, 2020
    @abigeater 我发现这样也是可以的,不管用哪种方式,还原的时候都需要经历复杂的逻辑。。 谢谢老哥
    shanghai1943
        22
    shanghai1943  
       Dec 31, 2020   ❤️ 1
    试了一下,在 Macos 下,先删子目录后删父目录,然后想恢复子目录的时候发现没反应。。
    SjwNo1
        23
    SjwNo1  
    OP
       Jan 4, 2021
    @shanghai1943 产品看了 win 的效果然后要批量还原。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2546 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 138ms · UTC 04:57 · PVG 12:57 · LAX 21:57 · JFK 00:57
    ♥ Do have faith in what you're doing.