TokuDB

从B+树到LSM树,及LSM树在HBase中的应用

最后都变了- 提交于 2021-01-29 07:34:24
前言 在有代表性的关系型数据库如MySQL、SQL Server、Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和B+树。而在一些主流的NoSQL数据库如HBase、Cassandra、LevelDB、RocksDB中,则是使用日志结构合并树(Log-structured Merge Tree,LSM Tree)来组织数据。本文先由B+树来引出对LSM树的介绍,然后说明HBase中是如何运用LSM树的。 回顾B+树 为什么在RDBMS中我们需要B+树(或者广义地说,索引)?一句话:减少寻道时间。在存储系统中广泛使用的HDD是磁性介质+机械旋转的,这就使得其顺序访问较快而随机访问较慢。使用B+树组织数据可以较好地利用HDD的这种特点,其本质是多路平衡查找树。下图是一棵高度为3的4路B+树示例。 与普通B树相比,B+树的非叶子节点只有索引,所有数据都位于叶子节点,并且叶子节点上的数据会形成有序链表。B+树的主要优点如下: 结构比较扁平,高度低(一般不超过4层),随机寻道次数少; 数据存储密度大,且都位于叶子节点,查询稳定,遍历方便; 叶子节点形成有序链表,范围查询转化为顺序读,效率高。相对而言B树必须通过中序遍历才能支持范围查询。 当然,B+树也不是十全十美的,它的主要缺点有两个: 如果写入的数据比较离散,那么寻找写入位置时,子节点有很大可能性不会在内存中

【MySQL 读书笔记】当我们在使用索引的时候我们在做什么

微笑、不失礼 提交于 2020-12-13 19:35:10
我记得之前博客我也写过关于索引使用的文章,但是并不全面,这次尽量针对重点铺全面一点。 因为索引是数据引擎层的结构我们只针对最常见使用的 Innodb 使用的 B+Tree 搜索树结构进行介绍。 每一个在 InnoDB 的中的索引都对应一颗 B+Tree。举个栗子: 创建这样一个表,并且在字段 k 上创建索引 mysql> create table T( id int primary key, k int not null, name varchar( 16 ), index (k))engine =InnoDB; 这个时候我们插入值 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6) 这个时候主键的聚簇索引对应一颗树,然后 k 索引值对应一棵树。 基于 Innodb 引擎的特性,一个表只能有一个聚簇索引,聚簇索引上面会记录所有表字段的有序的信息。普通二级索引上面只有该索引字段和主键索引字段的对应信息。(如果可以看得比较明确)。当我们使用语句 select * from xxx where k = x 的时候,我们使用了二级索引。并且由于在二级索引上面没有索引覆盖到 name 字段,所以我们需要在二级索引里面拿到 id = x 的值然后再去聚簇索引树中搜索对应的 name 记录。这个过程被称作回表。 在频繁查询大表特别是字段非常多的表的时候

打通MySQL架构和业务的任督二脉

匆匆过客 提交于 2020-11-30 03:22:45
目前,在很多OLTP场景中,MySQL数据库都有着广泛的应用,也有很多不同的使用方式。从数据库的业务需求、架构设计、运营维护、再到扩容迁移,不同的MySQL架构有不同的特点,适应一定的业务场景,或者解决一定的业务问题。 DBA作为数据库架构的设计、实施、维护人员,不仅要对各种MySQL架构非常熟悉,还要了解业务,对于不同的业务有一定的划分和认识,并根据业务特点和架构特点,合理选择和使用MySQL,满足业务需求。 本文从MySQL常见架构、业务环境分类、业务与架构结合使用原则三个方面对MySQL数据库和业务场景进行探讨和说明,让大家先分别对MySQL的架构和业务分类有所了解,然后再将两者贯通起来,使得能够在进行业务与MySQL架构设计时纲举目张,让用户可以用合适的技术解决支撑业务需求。 一、MySQL数据库常见架构 为了对MySQL数据库常见架构,能够有进行比较清晰的认识,下面先从MySQL三种通用基础架构、五种特殊需求架构、架构组合与综合使用三个方面进行说明。 1、 MySQL三种常见基础架构 (1)MySQL单实例架构 MySQL单实例,就是在服务器上部署一个MySQL实例来对外提供服务,这是最开始接触MySQL数据库会使用的方式,也是常见学习、研究MySQL数据库的使用方式。 MySQL单实例的使用方式,是MySQL数据库使用的第一阶段,通常这种情况下

谈一谈数据库的那些事

陌路散爱 提交于 2020-08-12 05:09:40
文章目录 Question1:介绍一下数据库存储引擎,以及罗列你所知道的几种不同的数据库存储引擎? Answer1: 数据库存储引擎含义 存储引擎1:InnoDB ( B+树 ) 存储引擎2:TokuDB( Fractal Tree-节点带数据 ) 存储引擎3:MyIASM 存储引擎4:Memory Question2:谈一谈如何设计出高效的索引(或谈一谈你所知道的索引设计法则或如何在索引层面提高查询速度)? Answer2: Question3:介绍一下数据库的三大范式? Answer3: Question4:介绍一下数据库事务ACID ? Answer4: Question5:介绍一下数据库事务隔离机制? Answer5: Question6:介绍一下数据库事务存储过程( 特定功能的SQL语句集)? Answer6: Question7:谈一谈触发器(一段能自动执行的程序)? Answer7: Question8:介绍一下数据库并发策略? Answer8: Question9:介绍一下数据库锁? Answer9: Question10:介绍一下数据库基于Redis的分布式锁? Answer10: Question11:介绍一下数据库分区、分表技术? Answer11: Question12:谈一谈数据库两阶段提交协议? Answer12: Question13

双十一高并发场景背后的数据库RDS技术揭秘

我是研究僧i 提交于 2020-03-02 18:44:23
摘要: 双十一就要来了,全世界都为其疯狂,但是在双十一抢购中经常会出现几万人抢一个红包或者很多人共同购买一个商品的情况,这就引发了一个数据库比较担心的场景----高并发。作为历届双十一重要保障之一的云数据库RDS部门,从参数优化、链路访问、弹性扩容、架构设计等方面应对高并发场景(如秒杀、百万人抢单等),保障双十一顺利进行。 【战报】11月11日聚石塔(阿里云数据库RDS产品形态)峰值QPS突破X00w,Proxy 峰值QPS超过X00w。 双十一就要来了,全世界都为其疯狂,但是在双十一抢购中经常会出现几万人抢一个红包或者很多人共同购买一个商品的情况,这就引发了一个数据库比较担心的场景----高并发。作为历届双十一重要保障之一的云数据库RDS部门,从参数优化、链路访问、弹性扩容、架构设计等方面应对高并发场景(如秒杀、百万人抢单等),保障双十一顺利进行。那么背后的技术是如何实现的呢?本文,将带您展开双十一阿里云RDS数据库背后技术的小秘密。 参数优化 在处理“高并发”场景的时候,一些特定的数据库参数就成为能否保障数据快速响应和平顺处理“高并发”问题,就成了关键,如下列出了几个特别重要的参数: •loose_rds_max_tmp_disk_space:控制MySQL能够使用的临时文件的大小; •loose_rds_threads_running_high_watermark

mysql replication (TokuDB replica): Column X of table 'database.table' cannot be converted from type 'varchar(Y)' to type 'varchar(Y)'

岁酱吖の 提交于 2019-12-11 10:17:43
问题 Experienced this error when reviewing the output of SHOW SLAVE STATUS\; this is the excerpt from the status output: Last_SQL_Errno: 1677 Last_SQL_Error: Column 1 of table 'database.table' cannot be converted from type 'varchar(16)' to type 'varchar(16)' Configuration: Master - Mysql 5.6.x // table with error has ENGINE=InnoDB Replica - Percona 5.6.x // table with error has ENGINE=TokuDB The column definitions on the master and the replicate servers match exactly: SHOW CREATE TABLE database

MYSQL数据库集群方案-PXC

感情迁移 提交于 2019-11-30 11:55:50
一、安装Percona数据库 1. 离线安装Percona 进入RPM安装文件目录,执行下面的脚本 yum localinstall *.rpm 管理MySQL服务 systemctl start mysqld systemctl stop mysqld systemctl restart mysqld 2. 在线安装Percona 使用yum命令安装 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm yum install Percona-Server-server-57 管理MySQL服务 service mysql start service mysql stop service mysql restart 3. 开放防火墙端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload 4. 修改MySQL配置文件 vi /etc/my.cnf [mysqld] character_set_server = utf8 bind-address = 0.0.0.0 #跳过DNS解析 skip-name

网易云课堂DBA学习笔记 (三) 事务与储存引擎

倾然丶 夕夏残阳落幕 提交于 2019-11-29 13:16:20
事务 概念说明: DDL语句:特指修改表结构的语句,如增删表字段等 DML语句:特指增删改查等sql语句 基本知识 事务的基本属性 原子性 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚 一致性 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 持久性 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 数据库隔离现象 脏读 事务B读取到事务A尚为提交的数据变更 不可重复读 事务B前后两次读取一条记录之间,该记录被事务A修改并提交,导致事务B读到了不一样的结果 幻读 事务B按条件匹配到n条记录并修改,但由于修改过程中事务A新插入符合条件的记录,导致事务B更新完成后仍发现有符合条件的数据未被更新。 幻读与不可重复读在理解上差不多,区别是一个是修改数据一个是新增数据 数据库隔离级别

TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘

血红的双手。 提交于 2019-11-28 21:48:34
原文出处: 阿里云RDS-数据库内核组 HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OLAP)混合场景的关系型数据库。HybridDB采用一份数据存储来进行OLTP和OLAP处理,解决了以往需要把一份数据多次复制来分别进行业务交易和数据分析的问题,极大地降低了数据存储的成本,缩短了数据分析的延迟,使得实时分析决策称为可能。 HybridDB for MySQL兼容MySQL的语法及函数,并且增加了对Oracle常用分析函数的支持,100%完全兼容TPC-H和TPC-DS测试标准,从而降低了用户的开发、迁移和维护成本。 TokuDB是TokuTek公司(已被 Percona收购)研发的新引擎,支持事务/MVCC,有着出色的数据压缩功能,支持异步写入数据功能。 TokuDB索引结构采用fractal tree数据结构,是buffer tree的变种,写入性能优异,适合写多读少的场景。除此之外,TokuDB还支持在线加减字段,在线创建索引,锁表时间很短。 Percona Server和Mariadb支持TokuDB作为大数据场景下的引擎,目前官方MySQL还不支持TokuDB。ApsaraDB for MySQL从2015年4月开始支持TokuDB,在大数据或者高并发写入场景下推荐使用。 TokuDB优势 数据压缩