数据库
文章平均质量分 92
神技圈子
八年以上对象存储、分布式文件存储开发老兵。曾在多家存储大厂(华为、阿里云)担任过存储开发专家。LeetCode讲师、Apache Doris contributor
展开
-
一文彻底搞懂leveldb架构
leveldbleveldb是一个写性能十分优秀的存储引擎,是典型的LSM-tree的实现。LSM的核心思想是为了换取最大的写性能而放弃掉部分读性能。那么,为什么leveldb写性能高?简单来说它就是尽量减少随机写的次数。leveldb首先将数据更新到内存中。当内存中的数据量达到一定阈值,将这部分数据再真正刷新到磁盘文件中。一般来说,顺序写60MB/s,随机写45MB/s.整体架构leveldb主要由以下几个重要的部件构成:1.memtable2.immutable memtable3.sst原创 2022-05-18 15:09:11 · 8873 阅读 · 3 评论 -
一文搞懂MySQL XA如何实现分布式事务
一文搞懂MySQL XA如何实现分布式事务前言XA 协议如何通过MySQL XA实现分布式事务前言MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开发一个业务系统,它接受外部的请求,然后访问多个内部其它系统才能执行该请求。执行时我们需要同时更新多个数据库的值(D1,D2,D3)。由于系统必须处于一个一致性,也就是这三个数据库的值要么同时更新成功,要么全部不更新。不然会造成子系统有些指令成功了,有些指令尚未执行。导致对结果理解混乱。那原创 2021-11-07 23:17:16 · 4774 阅读 · 4 评论 -
【源码讲解】Redis的字符串是如何实现的
这里写自定义目录标题前言前言为什么不用char*前言这里写自定义目录标题前言前言为什么不用char*前言字符串在日常开发中应用得比较普遍,对于Redis来说,键值对中的键是字符串,值也是字符串。比如在Redis中写入一条客户信息记录姓名、性别、爱好等。在Redis这种内存数据库中,由于字符串被广泛的应用,在设计字符串时基于以下几点来设计:1.支持丰富高效的字符串操作,比如追加、拷贝、比较等2.能保存二进制数据3.能尽可能的节省内存开销可能会有人问了,既然C语言库提供了char*这样的字符原创 2021-10-21 23:01:54 · 2335 阅读 · 2 评论 -
小白都能看懂的分布式事务与2PC
实现分布式事务原子性的协议一说到事务,一般就会想到ACID特性,其中A(atomic)其实就是指事务的原子性。那么什么是原子性呢,简单来说原子性就是要求事务只有两个状态:一是成功,也就是所有操作全部成功二是失败,任何操作没有被执行,即使过程中已经执行了部分操作,也要保证回滚这些操作。其实要做到原子性并不容易,因为多数情况下事务是由多个操作构成的序列。而分布式事务原子性的表现与普通的事务原子性一致。分布式事务要涉及多个物理节点,而且还增加了网络这个不确定因素,使得要满足分布式事务的原子性问题更加复原创 2021-08-24 11:32:27 · 701 阅读 · 0 评论 -
数据库专题——深入理解count(*)为什么这么慢
一文搞懂count(*count(*)的实现方式功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入之前在开发一个交易平台过程中,有遇到过需要计算交易记录总数。可能很多人会和我当初想得一样一条select count(*) from原创 2020-09-15 10:56:48 · 2837 阅读 · 4 评论 -
一文搞懂如何使用封锁来实现并发控制
前言随着数据库应用的不断发展,数据规模逐渐升级,为了提高效率。往往会将多个事务并发的执行。而多个事务并发可能会同时存取同一数据,产生数据不一致的情况。比如“脏”读,不可重复读等。所以数据库管理系统(简称DBMS),必须提供并发控制机制。使得并发的事务在冲突时串行化执行。这种调度称为可串行化调度。并发控制主要有两种方式,封锁和时间戳。我们先来讨论用封锁的方式来保证事务并发控制中的一致性问题。封锁方式是基于各种锁来进行并发控制。在封锁机制中,当多个事务同时访问同一数据时,应对其进行封锁请求的授予或等待。而加原创 2020-07-24 10:51:59 · 4529 阅读 · 4 评论 -
数据库专题 一文理解如何选择普通索引和唯一索引
不同场景下的选择网上已经有很多关于唯一索引和普通索引的区别,这里就不详细阐述了,接下来我们深入讨论如何根据不同业务场景,应该选择普通索引还是唯一索引。比如维护一个社保管理系统,每个社保人员都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果该系统需要按照身份证号查询姓名,就会执行这样的SQL语句:select name from suser where id_card...原创 2019-11-18 20:04:41 · 1239 阅读 · 3 评论 -
数据库专题-一文理解InnoDB为什么常用B+树做索引
在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)他的最小单元是块,一个块的大小是 4K。而对于 InnoDB 存储引擎也有自己的最小储存单元——页(Page),一个页的大小是 16K。InnoDB 的所有数据文件(后缀为 .ibd 的文件),他的大小始终都是 16384(16K)的整数倍。当然,在MariaDB中页的大小也是可以设置的...原创 2019-10-10 22:41:39 · 3298 阅读 · 6 评论 -
sql 外键约束实例
sql外键约束实例结论在oracle 中的测试在MySQL中的测试结论当一个表A的列a为另一个表B的列b的外键时如果A的列a中删除的值在B的b列中存在,执行被禁止如果B的列b中插入的值在A中的a列中没有,执行被禁止在oracle 中的测试1.创建table cc 其中ID 是主键2.在主键上插入数据,并测试主键唯一性3.创建表 ccpre4.建立外键约束,把ccpre中...原创 2019-07-11 09:48:45 · 1580 阅读 · 1 评论 -
MySQL不同隔离级别并发测试分析
MySQL不同隔离级别并发测试分析背景事务基于锁的并发控制MVCC测试方法用例与分析测试结果用例分析总结背景事务事务是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务的出现主要有两个目的,一是提供数据库操作失败时的恢复方法,而是当多个应用程序同时访问数据库时,对其进行隔离,以防止相互干扰。事务具有原子性、一致性、隔离性、持久性四种特性,也就是所谓的ACID特性。在多个应用...原创 2019-07-05 11:22:33 · 4162 阅读 · 1 评论 -
事务并发控制(一)
1、事务的概念 事务是用户定义的一组数据库操作序列。 事务具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。 原子性指:事务包含的所有操作要么全部被执行,要么都不执行;一致性指:事务的执行结果必须使数据库从一个一致性状态转换到另一个一致性状态,一致性状态是指数据库中的数据满足...原创 2019-01-15 21:29:51 · 13235 阅读 · 6 评论 -
常见结构化存储系统架构
什么是结构化存储系统结构化数据一般指存储在数据库中,具有一定逻辑结构和物理结构的数据,最为常见的是存储在关系数据库中的数据;非结构化数据:一般指结构化数据以外的数据,这些数据不存储在数据库中,而是以各种类型的文本形式存放,其中Web上的一些数据(内嵌于HTML或XML标记中)又具有一定的逻辑结构和物理结构,被称为半结构数据。目前比较成熟的结构化存储系统有Cassandra、Bigtable...原创 2019-03-01 22:39:24 · 10703 阅读 · 0 评论 -
MySQL 存储引擎 (SphinxSE)安装详解
sphinxSE是一个mysql存储引擎,它可以编译进入mysql server之中,但必须版本是5.x(5.0.22或者5.0.x更高版本,5.1.12或者更高但5.1.x),在这里我采用的是5.1.55,Sphinx版本是coreseek-3.2.14,注意5.0.x的安装方式不一样,虽然是一个搜索引擎但是SphinxSE本身不存储数据,它是一个内置的客户端,允许mysql服务器与Sphinx...原创 2019-02-19 18:23:08 · 5158 阅读 · 0 评论 -
Memcached删除机制
Memcached 不会释放已分配的内存(这个跟Memcached实现的内存存储机制有关,可以查看Memached内存存储机制文章)。记录超时后,客户端就无法再看见该记录(invisible,透明),其存储空间即可重复使用。Memcached 会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分...原创 2019-02-16 10:23:13 · 3908 阅读 · 0 评论 -
Memcached 内存存储机制
最近的 Memcached 默认情况下采用了名为 Slab Allocator 的机制分配、管理内存。在该机制出现以前,内存的分配是通过对所有记录简单地进行 malloc 和 free 来进行的。但是,这种方式会导致内存碎片,加重操作系统内存管理器的负担,最坏的情况下,会导致操作系统比 memcached 进程本身还慢。Slab Allocator 就是为解决该问题而诞生的。Slab Allo...原创 2019-02-16 10:17:43 · 2697 阅读 · 0 评论 -
HandlerSocket的安装实例及性能测试
一 HandlerSocket简介Hanldersocket是一个MySQL守护进程插件,它让应用程序可以将MySQL当NoSQL使,Hanldersocket的主要目的是与存储引擎,如InnoDB交互,而不需要SQL相关的开销。访问MySQL表时,Hanldersocket仍然需要打开和关闭表,但不是每次访问都要求打开和关闭,因此减少了互斥争夺,极大地提高了系统性能,当流量变小时,Ha...原创 2019-02-14 20:25:11 · 5638 阅读 · 2 评论