MVCC初学demo(二

实现一个版本控制的demo

  • 1.对应的一条数据要有源可循 。所以这个条数据有个ID,内容还需要有DB_TRX_ID,DB_ROLL_ID,DB_ROW_ID。事务ID好处理直接一个全局自增就可以了,ROW_ID那对当前的数据搞个自增ID,那么ROLL_ID就是上一个的ROW_ID,一个简单的数据版本就出来了,当然还需要个状态不然脏数据我们没单独处理。查询的时候我们根据版本和状态来。
  • 2.再找个B+树的算法,把里面要保存的数据变成有版本的数据,这样感觉一个demo快出来了。
  • 3.找的这个B+树一个都是按照度也就是叶子节点最大数做限制,这里跟数据库里面的设置的层级限制有出入(但这里我是改不动的)。
  • 4.存储也是个大问题这里不做叙述,因为还没想好,这里涉及到何时刷盘的问题,还有就是你要直接堆确实也能堆但是堆的对有点耗时间感觉意义也不是很大(因为之前写过一点写读数据的,这里想了解下分布式写数据但这里又有点太难了,因为这里本身就是demo套demo的,这个demo有点难)。
  • 5.一个简单的事务demo控制:可以再外面套一层锁(2PL)去操作B+树就可以了,不知道这个对不对。
  • 6.大概就是开启一个事务、这个事务操作数据、然后事务提交或事务回滚。

这里说过死锁的问题

  • 1.死锁的触发条件:锁需要循环互斥等待。
  • 2.假如有连个锁A、B。事务1先拿A再拿B;事务2先拿B再拿A。
  • 3.刚好1占了A再去拿B,2占了B再去拿A;连个谁都不释放就僵持住了,需要有一个做出点牺牲先退出。

死锁为什么不提前预警的

从上面看到死锁似乎可能能够检测到,但为什么死锁还是会发生的。

原因 详细解释
误报率极高 如果尝试在事务刚开始等待时就预警,会产生海量的"假警报"。例如,一个事务等几毫秒就拿到了锁,这很常见。如果为此发预警,会让运维人员麻木,失去意义。
预测模型复杂且不可靠 要预测未来某个事务是否会与其他事务形成死锁环,需要预知所有相关事务未来的SQL执行计划、访问的数据行、执行时间等,这在分布式、高并发环境下几乎是不可能的。
性能开销巨大 实时分析所有事务的潜在冲突路径,计算量呈指数级增长,会严重拖慢数据库性能,得不偿失。
"预警"本身可能引入新问题 如果系统因为"可能死锁"就主动终止或阻塞某些事务,可能会导致正常业务被中断,甚至引发新的连锁反应。
相关推荐
李日灐12 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
倔强的石头_12 小时前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库
Elastic 中国社区官方博客12 小时前
使用 Groq 与 Elasticsearch 进行智能查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_2975746713 小时前
【实战】POI 实现 Excel 多级表头导出(含合并单元格完整方案)
java·spring boot·后端·excel
穿过锁扣的风13 小时前
一文搞懂 SQL 五大分类:DQL/DML/DDL/DCL/TCL
数据库·microsoft·oracle
l1t13 小时前
DeepSeek总结的SNKV — 无查询处理器的 SQLite 键值存储
数据库·sqlite·kvstore
洛豳枭薰13 小时前
MySQL 梳理
数据库·mysql
郝学胜-神的一滴13 小时前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建
Tony Bai13 小时前
“Go 2,请不要发生!”:如果 Go 变成了“缝合怪”,你还会爱它吗?
开发语言·后端·golang
九.九13 小时前
CANN 算子生态的底层安全与驱动依赖:固件校验与算子安全边界的强化
大数据·数据库·安全