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

差集:

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

  • 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 | {a, b, c} | 等着收 d |
| 手机 P | {a, b, c, d} | 本地有 d,要上传 |
| Pad Pd | {a, b, c} | 缺 d |

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

📌

| 设备 \ 云端 | 无 | active | tombstone |
| | 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_photo |
| 1 | 主相册长按 → 删除 | 移到本地"最近删除" | 不动 |
| 2 | 本地"最近删除"→ 删除 | 彻底没了 | 还是 active |

3 锁屏哄女朋友 ------ ------
此刻状态:
  • 手机端: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
  • 内容变了(多了一层滤镜的像素数据)

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

相关推荐
张小凡vip1 小时前
Python爬虫实战:高效稳定的文件下载模块设计与实现
开发语言·爬虫·python
数模竞赛Paid answer1 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯
代龙涛1 小时前
WordPress header.php 与 footer.php 模板结构详解
开发语言·php·wordpress
科学实验家1 小时前
dp子序列问题,好难呀
算法
黄贵根7 小时前
JavaScript实现教培行业意向登记系统
开发语言·javascript·ecmascript
2401_868534789 小时前
RTOS之RT-Thread & Linux:线程/进程管理与调度核心差异分析
c++·python
zzzll111110 小时前
Claude Code离线安装方案揭秘
开发语言·php
wabs66610 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
mifengxing10 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法