微信文件存储,技术大牛的你应该如何解决问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leaves615
V2EX    问与答

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

  •  
  •   leaves615 2023-03-07 08:01:49 +08:00 6030 次点击
    这是一个创建于 948 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近一段时间看新闻,很多针对微信传输的文件在各平台存储的问题上有过针对性的批评。主要集中在以下两点。
    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
    禁止发图片文件!
    pq2Q3XZidsTF906J
        2
    pq2Q3XZidsTF906J  
       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 法律规定必须保存两年以上
    unneeded
        31
    unneeded  
       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     Solana     3097 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:01 PVG 19:01 LAX 04:01 JFK 07:01
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86