- 博客(14)
- 资源 (6)
- 问答 (2)
- 收藏
- 关注
转载 Mysql MVCC实现原理解析
MVCC(Multi-Version Concurrency Control | 多版本并发控制) InnoDB通过为每一行记录添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号(LSN)。这是一个随着事务的创建而不断增长的数字。每个...
2018-08-22 18:27:36 14006
转载 轻松理解MYSQL MVCC 实现机制-(1)
1. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制(Multi-Version Concurrency Control)。1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用. 大家都应该知道,锁机制可以控制并发操作,但是...
2018-08-22 09:02:34 176 1
翻译 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
概念和区别SELECT ... LOCK IN SHARE MODE走的是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)。SELECT ... FOR UPDATE 走的是IX锁(意向排它锁),即在符合条件的rows上都加了排它锁,...
2018-08-20 19:32:44 815
原创 读者写者问题--使用信号量的读者优先与写者优先程序分析
千万要注意:readcount,writecount要设成共享变量(因为是进程),要不然可能会导致死锁所谓谁谁优先的问题,我认为主要体现在以下两点中:1.当低优先级进程(线程)获得临界区时,高优先级进程能很快从低优先级的进程中抢得访问权。2.当高优先级的进程获得临界区访问权时,低优先级得等到高优先级全部访问完的空闲时间才能抢得访问权。这两点中, 第一点一定得要,不然无法体现出...
2018-08-20 18:58:03 5049 1
转载 用户空间与内核空间,进程上下文与中断上下文[总结]
1、前言 最近在学习linux内核方面的知识,经常会看到用户空间与内核空间及进程上下文与中断上下文。看着很熟悉,半天又说不出到底是怎么回事,有什么区别。看书过程经常被感觉欺骗,似懂非懂的感觉,很是不爽,今天好好结合书和网上的资料总结一下,加深理解。2、用户空间与内核空间 我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的3...
2018-08-20 18:43:16 127
转载 关于 B+tree (附 python 模拟代码)
在之前,我一直只把 b+tree 当成是 btree 的一种变形,或者说是在某种情况下的一种优化,另外一些情况可能还是 btree 好些。但是做完之后才发现,b+tree 在各种情况都可以完全取代 btree,并能够让索引性能得到比 btree 更好的优化。因为 b+tree 设计的核心要点,是为了弥补 btree 最大的缺陷。btree 最大的缺陷是什么?首先,我们知道对于 btree ...
2018-08-16 18:17:56 2688 2
转载 B+树介绍
B+树B+树和二叉树、平衡二叉树一样,都是经典的数据结构。B+树由B树和索引顺序访问方法(ISAM,是不是很熟悉?对,这也是MyISAM引擎最初参考的数据结构)演化而来,但是在实际使用过程中几乎已经没有使用B树的情况了。B+树的定义十分复杂,因此只简要地介绍B+树:B+树是为磁盘或其他直接存取辅助设备而设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶节点中...
2018-08-16 18:14:52 1037
转载 分布式之数据库和缓存双写一致性方案解析
【本文转自博客园 作者:孤独烟 原文链接:https://www.cnblogs.com/rjzheng/p/9041659.html】为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库...
2018-08-16 09:23:43 1299
原创 cloud-init实现自动扩展 磁盘分区
背景说明cloud-init 的一项功能是自动扩展linux的指定分区。比如linux镜像是20G,在部署instance时选择的flavor磁盘定义是40G,那么instance部署时cloud-init会自动将制定分区扩到 40G。 环境准备1) 该功能依赖growpart,所以需要在开始前,在镜像中安装包: yum install –y cloud-utils-gro...
2018-08-09 16:34:56 7373
转载 布隆过滤器(Bloom Filter)原理以及应用
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。hash原理 Hash (哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个...
2018-08-09 08:55:42 854
转载 常见的Redis架构设计缺陷 - 缓存穿透
什么是缓存穿透所谓的缓存穿透,简单来讲就是查询某些不存在的key时,缓存和数据库查询结果都为空,而空的结果又不被缓存起来,而导致每次查询都去请求数据库层的情况。过程:缓存不命中,进而导致每次查询都去查询数据库,缓存也就失去了作用,通常表现为服务器负载迅速上升,严重时可能直接宕机。常见场景日常网站开发中,我们通常会将一些访问频繁的页面缓存起来,比如文章详情页、商品详情页等,而...
2018-08-08 20:12:26 422
转载 Raft一致性算法
Why Not PaxosPaxos算法是莱斯利·兰伯特(LeslieLamport,就是 LaTeX 中的”La”,此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法。由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后1998年重新发表到ACM Transactions on Computer Systems上(The Part-TimeParliament...
2018-08-08 20:11:13 159
转载 linux内存源码分析 - 内存回收(lru链表)
概述 linux使用修改过的LRU算法简要介绍: 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以这篇文章就先说说系统的lru链表。 内存回收的核心思想,就是如果一些数据能够保存到磁盘,在内存不足时就把这些数据写到磁盘中,这样这些数据占用的内存页就可以作为空闲内存页给予系统使用了。 当...
2018-08-08 19:45:10 1207
转载 Linux用户空间与内核空间(理解高端内存)
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。 Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段页式机制如下图。 ...
2018-08-01 08:56:10 464
logstash-filter-translate-3.0.4.zip
2018-04-21
MySQL技术内幕:InnoDB存储引擎.mobi
2018-03-06
Redis设计与实现数据库技术丛书.mobi
2018-03-06
求教java中的unsafe.allocateMemory() 会导致内存申请失败吗?
2013-12-25
求教spring jdbc 编程式事务 与申明式事务 死锁如何解决?
2013-08-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人