V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leaves615
V2EX  ›  问与答

微信文件存储,技术大牛的你应该如何解决问题?

  •  
  •   leaves615 · 2023-03-07 08:01:49 +08:00 · 5264 次点击
    这是一个创建于 631 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近一段时间看新闻,很多针对微信传输的文件在各平台存储的问题上有过针对性的批评。主要集中在以下两点。
    1. 本地文件在多次转发后会复制多份存储,没转发一次就会创建一个副本。导致微信本地文件占用空间越来越大,几十个 G 甚至更多。
    2. 微信把本地文件设置为只读权限,影响了直接打开编辑,导致非常的不方便。

    v's:如果是你来负责微信的本地存储功能,你会如果解决这个问题呢?让体验达到最优。
    37 条回复    2023-03-08 09:43:43 +08:00
    zhaokun
        1
    zhaokun  
       2023-03-07 08:06:27 +08:00 via iPhone
    禁止发图片文件!
    yhm2046
        2
    yhm2046  
       2023-03-07 08:06:55 +08:00
    为什么要保存在本地? qq,电报,whatapp 都怎么做的跟着抄不行?
    murmur
        3
    murmur  
       2023-03-07 08:07:58 +08:00
    为什么要解决问题,微信这个体量还有什么好改的么,不留几个陈年老坑不改难道程序员全裁掉?
    Eytoyes
        4
    Eytoyes  
       2023-03-07 08:09:18 +08:00
    发送后删除本地文件做成选项,矛盾成功转移
    totoro625
        5
    totoro625  
       2023-03-07 08:11:50 +08:00   ❤️ 1
    微信会员,10 元 /月,漫游 3 个月聊天记录
    微信超级会员,25/月,漫游 1 年聊天记录
    微信尊享会员,55/月,漫游 3 年聊天记录
    微信至尊会员,95/月,漫游 10 年聊天记录

    不开会员的天天弹窗让你删除本地文件,回收本地空间,让你不小心点错清空聊天记录,倒逼你开会员
    aaniao002
        6
    aaniao002  
       2023-03-07 08:13:59 +08:00 via Android
    以用户感受为主,点了下载的那才叫本地储存,其他的叫临时文件。
    leaves615
        7
    leaves615  
    OP
       2023-03-07 08:16:59 +08:00
    @yhm2046 qq ,telegram ,wahtapp 都是本地缓存的,app 现在的人均带宽情况下,还做不到全部云端。
    Building
        8
    Building  
       2023-03-07 08:21:12 +08:00 via iPhone   ❤️ 4
    你自己需要的需求: a && b
    实际上的业务需求: a && b && c && d && (e || f || g) && ((h && i) || (j && k)) && l && n && m…
    cpstar
        9
    cpstar  
       2023-03-07 08:21:13 +08:00
    @Eytoyes 4# 已经转移了,请取消勾选保留聊天记录
    Bingchunmoli
        10
    Bingchunmoli  
       2023-03-07 08:29:15 +08:00 via Android
    @leaves615 其实是全云端,只是同步做不做而已
    Eytoyes
        11
    Eytoyes  
       2023-03-07 08:42:03 +08:00
    @cpstar #8 没想到吧,默认就是不勾选。我再把默认不勾选也做成选项,矛盾再次成功转移
    litguy
        12
    litguy  
       2023-03-07 08:45:59 +08:00
    本地文件存储的多份问题,不需要大牛
    只需要每个文件有个 引用计数
    转发一次,新的消息进来本地查重(例如基于 SHA1/MD5 这些,本地对文件在 sqlite 里面有个表,除了存储路径,还有对应的 SHA1/MD5 值),引用计数 + 1 就行了,不需要再次存储数据,新的消息指向唯一的文件路径就可以读取文件显示了
    这个存储的标准用法至少存在了 20 年了
    只是微信设计的奇葩而已
    不是大牛,存储软件研发十多年的普通工程师路过
    JohnH
        13
    JohnH  
       2023-03-07 08:49:44 +08:00   ❤️ 1
    咱们可以从设计反推需求,分析如下:

    1.几年前我从桌面编辑完某文档后,通过拖拽发送给对方,随后就删除了。等我想再确认一下当时发送的内容时,发现文件已被清理。而现在的逻辑是只要产生文件发 /收,就会把文件副本到微信消息目录。
    需求:(普通)用户多次反馈发送的文件找不到了
    至于相同内容多副本的,不知道是不想做还是就没想这块的设计
    2.这个场景更容易想,某些企业,会发送报名表、申请表、xx 单子等等,用户都习惯于打开后就地修改,导致原始文件被改得面目全非。
    为了避免发送多次,干脆一刀切,全部只读。以后“教会”用户学会另存到本地修改。
    bluetree2039
        14
    bluetree2039  
       2023-03-07 09:03:07 +08:00 via iPhone
    @JohnH 我确实碰到这样的情况。原始文件找不到了
    Mithril
        15
    Mithril  
       2023-03-07 09:03:31 +08:00
    说是这么说,不过你要是问 “刚入职,发现公司做的产品本地文件在多次转发后会复制多份存储,而且都设置为只读,要如何改进解决这个问题?”

    大家肯定有一个算一个都回答你:能用吗?能用就不要改。

    那你猜去腾讯的会不会这么想。。。
    br00k
        16
    br00k  
       2023-03-07 09:14:35 +08:00
    第一个问题,文件系统是可以解决的。苹果的 APFS 相同文件不会重复占用空间。
    Rennen
        17
    Rennen  
       2023-03-07 09:16:22 +08:00
    @leaves615 tg 确实就是全部云存储,只要号不删,所有聊天记录就会一直在,甚至有人还拿 TG 当网盘。WhatsApp 我记得好像可以同步 google drive
    leaves615
        18
    leaves615  
    OP
       2023-03-07 09:16:26 +08:00
    @Bingchunmoli 微信号称服务器端不存用户数据的。
    leaves615
        19
    leaves615  
    OP
       2023-03-07 09:18:57 +08:00
    @br00k Apple 系不管是桌面系统还是手机系统占比都不高的。都是次主要系统。apfs 不能代表全部。
    fatekey
        20
    fatekey  
       2023-03-07 09:46:27 +08:00
    直接抄 QQ ,文件方面 QQ 虽然也有不少槽点但是比微信强多了。
    kontttt
        21
    kontttt  
       2023-03-07 09:47:35 +08:00
    微信文件存储每一个都会追加特殊内容用于溯源,看似同一个但不同场景里就会是非同一份文件
    zpxshl
        22
    zpxshl  
       2023-03-07 10:08:42 +08:00 via Android
    @Mithril 不知道在腾讯会怎样,在我们部门的话,发现这种问题得赶紧写文档,再发出来宣布主权并编码优化,都是绩效呢...
    otakustay
        23
    otakustay  
       2023-03-07 11:27:21 +08:00
    我觉得微信的处理方式没有问题,安卓加上 write on copy 就好了嘛
    icyalala
        24
    icyalala  
       2023-03-07 12:31:19 +08:00
    @litguy 那你就需要考虑用户修改或者替换某个文件的可能,尤其是发送过程中修改,还有 md5 校验的耗时
    callmesmc
        25
    callmesmc  
       2023-03-07 12:47:36 +08:00
    节省服务器开支,直接本地存一份,并且不让你改,只要下载一次就行
    hhjswf
        26
    hhjswf  
       2023-03-07 12:52:28 +08:00 via Android
    云端存储就要开会员了,龙哥又不傻
    litguy
        27
    litguy  
       2023-03-07 14:39:14 +08:00
    @icyalala MD5 不耗时,微信的图片没多大,这个不用考虑,我们平常按块计算 SHA256 ,一秒处理几十万个 IO
    icyalala
        28
    icyalala  
       2023-03-07 14:52:40 +08:00   ❤️ 1
    @litguy 这里说主要说的是文件,发送个几百兆 ppt/pdf 还是很常见的。最近楼主和其他人抱怨的是 Windows 微信在收发文件时会把文件改成只读,然后用户想要修改保存时就会失败。但如果不保护这个文件,发送接收或者验证 md5 就可能有问题,毕竟都会耗时。所以我说如果你只存一份文件也同样需要考虑这种事情。
    Ericcccccccc
        29
    Ericcccccccc  
       2023-03-07 15:17:37 +08:00
    这个真得加钱.
    Bingchunmoli
        30
    Bingchunmoli  
       2023-03-07 15:45:18 +08:00 via Android
    @leaves615 法律规定必须保存两年以上
    zhaidoudou123
        31
    zhaidoudou123  
       2023-03-07 15:48:17 +08:00
    说起来 iOS 里 APFS 的复制优化对微信起作用嘛?
    Bootis
        32
    Bootis  
       2023-03-07 20:18:49 +08:00
    @icyalala 发送的时候 copy 一个副本发送,你本地编辑为什么会影响发送呢,接收的时候也不存在 md5 验证问题。接收后编辑直接脱离了 “收发文件”这个操作,更不存在问题。
    leaves615
        33
    leaves615  
    OP
       2023-03-07 20:49:30 +08:00
    @Bingchunmoli 懂的都懂
    leaves615
        34
    leaves615  
    OP
       2023-03-07 20:52:54 +08:00
    对比了 telegram 。没有提供“打开文件所在的文件夹”这类功能,要想保存到本地,就需要通过下载功能保存。
    印象中微信是先有“打开文件所在的文件夹”,后才有上述问题出现。到现在就是一个需求妥协的现状。
    icyalala
        35
    icyalala  
       2023-03-07 21:23:23 +08:00
    @Bootis 你所说发送和接收都是 copy 副本来做,就是楼主和楼上抱怨的问题呀。。
    Bootis
        36
    Bootis  
       2023-03-08 09:29:58 +08:00
    @icyalala 接收不需要副本,接收后修改跟收发文件已经无关,不需要管 md5 。发送用临时副本发送就好,发送完成不管成功还是失败就删除
    icyalala
        37
    icyalala  
       2023-03-08 09:43:43 +08:00
    @Bootis 在微信里这么做不行,因为双方都可能在过了一段时间之后再次查看聊天记录,那记录里面的文件和图片都需要保持发送 /接收时的那个版本。聊天记录还能选择部分来转发,同样也要维持源文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1360 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:39 · PVG 07:39 · LAX 15:39 · JFK 18:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.