云计算百科
云计算领域专业知识百科平台

【科普】【差集&交集概念落地云相册】流食般投喂

差集:

差集有两个方向,业务含义完全不同:

  • A − B:在 A 但不在 B 的元素。比如「云端有、本地无 → 要下载」
  • B − A:在 B 但不在 A 的元素。比如「本地有、云端无 → 要上传」

云相册多端同步:

4.1 根本洞察:云端和设备,就是两个集合

云相册里每个文件都有一个全局唯一 ID(一般是 SHA-256 哈希值,或服务器分配的 UUID)。

  • 云端清单 C:云端认为存在的所有文件 ID
  • 每台设备各自的清单 D:该设备本地存储的所有文件 ID

同步的本质 = 让 C 和 D 在「文件存在性」这个维度上达成一致。

而「达成一致」需要回答三个问题:

             问题                    集合语言业务动作哪些文件两边都有?

哪些云端有、本地无?

哪些本地有、云端无?

        差集 C ∩ D 啥也不做
        差集 C − D 本地下载
        差集 D − C 本地上传

4.2、场景落地1

场景1:云相册有 a、b、c、d,手机刚把 d 上传了,Pad 和电脑都还缺 d。

初始状态:

        角色                               文件清单                 状态        云端 C

        手机 P

        Pad Pd

        电脑 PC

                                {a, b, c} 等着收 d
                                {a, b, c, d} 本地有 d,要上传
                                {a, b, c} 缺 d
                                {a, b, c} 缺 d

第 1 步:手机上传 d

手机端跑一次扫描:P − C = {d}。手机上送 d 到云端。云端接收,C 变成 {a, b, c, d}。

第 2 步:Pad 打开 App,开始同步

Pad 拉取云端清单 C = {a, b, c, d},对照本地 Pd = {a, b, c},跑扫描:

  • a == a → 交集
  • b == b → 交集
  • c == c → 交集
  • C 还有 d,但 Pd 已经走完 → 把 d 加入「待下载」队列
  • 结果:交集 {a, b, c},待下载 {d}

Pad 下载 d,本地变成 {a, b, c, d}。

第 3 步:电脑打开 App,同步

完全相同的流程,电脑也变成 {a, b, c, d}。

第 4 步:全员一致

现在 C = P = Pd = PC = {a, b, c, d}。再跑一次扫描,交集是全集、两个差集都为空——什么都不做。


4.3、场景落地2

场景2:女生来查男朋友的手机,发现男朋友手机上有一张初恋照片,女生很生气,男生为了哄女朋友,当着女生的面删掉了图片,哄好了,但是男生舍不得,事后又下载回来了,女生也是一位计算机大佬,被哄好后,突然想到云端可能还有备份,又去突击检查男朋友手机,结果发现男朋友又把初恋照片下载回来了,女生当即彻底删除掉男生初恋照片。

📌

设备 \\ 云端无activetombstone无

0. 真的没了 1. 设备要下载 2. 假装不存在(不下载)
3. 设备要上传 4. 已同步 5. 设备要删除
1. 幕 1:发现初恋照片
  • 手机 P = {a, b, c, d, ex_photo}
  • 云端 C = {a, b, c, d, ex_photo}
  • ex_photo 状态:(有, active) —— 状态 4,已同步
  • 系统层面:无事发生,这是稳态
2. 幕 2:男生当面删除
步操作手机本地 ex_photo云端 ex_photo1

2

3

主相册长按 → 删除 移到本地"最近删除" 不动
本地"最近删除"→ 删除 彻底没了 还是 active
锁屏哄女朋友 —— ——
此刻状态:
  • 手机端:ex_photo 在主相册和"最近删除"里都没了 → 本地真的没了
  • 云端:ex_photo 仍然是 active(从来没收到过删除事件)
  • 二元组状态:(无, active) —— 状态 1

男生表演得很彻底,但他只清理了云端数据在他这一台设备上的投影。云端那份真身,他一手指头都没碰。

3. 幕 3:男生舍不得,偷偷下回来

场景 A:什么都不做,等同步

只要以下任一事件发生,照片就会自己回来:

  • 手机重启 / 相册 App 重启
  • 网络从断到通
  • 后台定时同步任务触发
  • 任何一次「下拉刷新相册」

因为:

  • 设备 P = {a, b, c, d}(ex_photo 已被本地彻底删)
  • 云端 C = {a, b, c, d, ex_photo}
  • 跑一次 C − P → {ex_photo}
  • 手机 App 看到云端多了一个文件 → 自动下载到主相册

场景 B:男生主动"下回来"

主动的可能操作:

  • 登录云相册网页版 / 另一台登录过的设备
  • 看到 ex_photo 还在(因为他从来没告诉云端要删)
  • 主动下载 / 触发同步
4. 幕 4:女生突击检查

发现男朋友初恋照片又躺在男朋友手机里。

5. 幕 5:女生彻底删除
  • 在云端软删 ex_photo → 云端 active 变 tombstone
  • 立即在云端回收站硬删 ex_photo → 云端文件字节被抹
  • 在所有设备相册删 ex_photo(不只是手机——Pad/电脑也得删)
  • 跨设备同步:确保每台设备都把删除事件上送到云端,且云端的状态是"无 + 无"
  • 清缓存、清共享相册

4.4、场景落地3

场景3:明明吃完晚饭在路边散步,看到夕阳很美,用手机拍了一张照片,回家后用修图软件给照片加了滤镜,保存的时候选择了覆盖原图。

第 1 步:拍照
  • 手机:{a, b, c, d, sunset}
  • 云端:{a, b, c, d}
  • 差集(手机独有)= {sunset} → 上传
第 2 步:上传完成
  • 手机:{a, b, c, d, sunset}
  • 云端:{a, b, c, d, sunset}
  • 交集 = 全部 → 啥也不用做
第 3 步:加滤镜,覆盖原图
  • 文件名还是 sunset
  • 但内容变了(多了一层滤镜的像素数据)

📌两边都有、但内容不同的 → 上传新内容(或冲突让你选)

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【科普】【差集&交集概念落地云相册】流食般投喂
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!