版本管理结构分层
--------------------交互层--------------------
- 所有信息整体保存
- 每一部分信息独立保存
--------------------业务层--------------------
对“版本”一词的理解应该跟随用户视角,版本的相关规则应该根据业务特征确定。
- 点状结构,数据表间的关联关系极少
- 每保存一次增加一个版本
每天增加一个版本
星状结构,中心位置的数据表发散出很多关联表 1+N
- N越大,选择精细化版本管理的价值越大
业务呈现横向扩展
链状结构,A - B - C - D
链越长,业务越深
图状结构
- 实际上,很少纯粹的星状和链状,大多数时候是两者结合
- 也可能业务前期的结构比较是清晰,发展过程中演进成图
- 社交应用、LinkedIn,个人基本信息、工作经历、教育经历、相册、职位、行业、好友、公司基本信息等等
社交应用场景,100万用户,每个用户有50个好友,关系型数据库和图书局库的性能对比
深度 MySql执行时间 Neo4J执行时间 返回条目
2 0.016 0.01 ~2500
3 30.267 0.168 ~110000
4 1543.505 1.359 ~600000
5 未完成 2.132 ~800000
--------------------系统层--------------------
系统数据表 DataVersionSettings
- id // 自增
- contentModelId // 业务层数据表标识
- isEnabled // 是否启动版本管理功能
- dotCount // 版本号中小数点的个数
- maxVersionFrequency // 生成新版本的最大频率(次数/小时),若该值为6,则10分钟内的第二次更新将不生成新版本
- createdAt
- updatedAt
业务数据表
- version
- createdBy
- createdAt
- deletedAt
数据版本管理可能是一个产品买点,但有可能让我们陷入泥潭。 有一个新的思路可以考虑一下,从schema层面进行version化,再对外呈现。