数据库
文章平均质量分 58
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
MySQL cast()函数以及json列
在工作中遇到了json列,不清楚如何写SQL,查询了下相关的文档之后总结下,根据json列的值进行区分,列值指的是 json_type(json列)的结果。2、列值为 time/date/datetime。3、列值为 signed/unsigned。5、列值为 double/float。6、列值为 timestamp。4、列值为 object。7、列值为array。...原创 2022-08-11 17:27:53 · 1799 阅读 · 0 评论 -
记一次使用pt-query-digest工具分析MySQL慢查询日志
最近遇到了MySQL性能问题,使用percona 的 pt-query-digest工具分析性能的瓶颈点。并且pt-query-digest工具要优于MySQL本身自带的mysqldumpslow工具。查看pt-query-digest工具在ubuntu下的安装流程请看:ubuntu下安装pt-query-digest_一缕阳光a的博客-CSDN博客https://blog.csdn.net/zgaoq/article/details/124710484?spm=1001.2014.3001.550原创 2022-05-11 16:13:00 · 441 阅读 · 0 评论 -
MySQL字段值大小写敏感的解决方案
最近在用开源的MySQL 8.0开发本公司的产品,在客户现场建表时默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集导致与oracle的结果不一致,最后将建表时的字符集改为utf8mb3就可以了。正常建表如下,默认使用的是CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符集[test]> CREATE TABLE t3(id int primary key, name varchar(50))eng原创 2022-04-27 16:38:16 · 2635 阅读 · 2 评论 -
幻读和不可重复读
MySQLMySQL默认的隔离级别为RR,因此只会出现幻读的情况。不会出现不可重复读的问题。幻读事务在插入已经检查过不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测获取到的数据如同鬼影一般。例子:在事务1中,查询User表id为100的是用户否存在,如果不存在则插入一条id为100的数据。select*fromUserwhereid=100;在事务1查询结束后,事务2往User表中插入了一条id为100的数据。insertinto`Use...原创 2021-12-25 17:46:14 · 356 阅读 · 0 评论 -
MySQL幻读及解决方法
这是一篇数据库隔离级别的科普文章,旨在了解数据库中著名的幻读现象,为了专注,对脏读、不可重复读不作讨论。事务隔离级别MySQL有四级事务隔离级别:读未提交 READ-UNCOMMITTED: 存在脏读,不可重复读,幻读的问题读已提交 READ-COMMITTED:不存在脏读,但存在不可重复读,幻读问题可重复读 REPEATABLE-READ:不存在脏读,不可重复读问题,但存在幻读问题序列化SERIALIZABLE:解决脏读,不可重复读,幻读问题,但完全串行执行,性能最低什么是幻读幻转载 2021-12-25 17:14:32 · 3881 阅读 · 0 评论 -
MySQL5.7 常用系统表大全
MySQL5.7 默认的模式有:information_schema, 具有 61个表; m ysqL, 具有31个表; performance_schema,具有87个表; sys, 具有1个表, 100个视图. Information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。 在 MySQL中,把 ...转载 2021-12-05 15:46:21 · 1459 阅读 · 0 评论 -
MySQL源码解读之数据结构-LF_DYNARRAY
MySQL的代码中实现了一个Lock Free的Hash结构,称作LF_Hash。MySQL的不少模块使用了LF_Hash,比如Metadata Lock就依赖于它。但由于使用的方法不正确,导致了bug#98911和bug#98624。理解LF_Hash的实现细节,可以帮助我们用好LF_Hash。LF_HASH的基本特点动态扩展初始化时bucket的数量是1. 每个bucket平均拥有的元素(Element)是1个。因此当元素的总数量超过bucket的数量时,就会自动分裂。每次分裂增加一倍的buck转载 2021-11-30 11:57:28 · 244 阅读 · 0 评论 -
MySQL单机版Recycle Bin回收站功能
由于DDL语句无法回滚,开发或运维人员如果误操作(例如DROP TABLE)可能会导致数据丢失。阿里云支持回收站(Recycle Bin)功能,临时将删除的表转移到回收站,还可以设置保留的时间,方便您找回数据,同时提供了工具包(DBMS_RECYCLE)便于您快捷使用。前提条件 MySQL单机版实例版本如下:RDS MySQL 8.0 RDS MySQL 5.7Recycle Bin参数Recycle Bin设计了如下五个参数。参数 说明 loose_recycle_bin原创 2021-11-25 19:10:56 · 1687 阅读 · 0 评论 -
MySQL一张innodb表列个数的限制和engine的选择
在MySQL innodb存储引擎中,一张表中列的个数最大为4096。其中在MySQL中,创建表时可以任意指定engine的类型,但是,考虑到join、union、union all等复杂的场景时,尽量每张表都用统一的engine。原创 2021-11-05 17:50:29 · 333 阅读 · 0 评论 -
mysql中的if [not] exists
最近在MySQL数据库的基础上开发分布式的数据库,需要支持一个if [not] exists语法。学习了SQL语法解析部分,总结下:1、在MySQL中,创建表时支持create table if not exists db.table_name ....create table if not exists test1( c1 int primary key, c2 varchar(50))engine = innodb;如果要创建的表存在,则直接返回,不在重新创建该表。原创 2021-07-12 19:00:50 · 12150 阅读 · 0 评论 -
MySQL中alter table range partition
最近在用MySQL开发新功能时,使用到了alter table range partition的功能,在此总结下mysql innodb支持的alter table range partition相关功能。mysql的版本是8.0.22, os: linux ubuntu对alter range partition的操作主要由以下几个:analyze partitionadd partitiondrop partitiontruncate partitionremove partition原创 2021-06-17 17:41:11 · 2311 阅读 · 0 评论 -
mysql 8.0 一条insert语句的具体执行流程分析(一)
最近在mysql 8.0的代码上开发新的功能的时候,梳理了insert语句的执行过程,由于insert语句比较复杂并且涉及的内容很多,在下面准备分3章节来分析,这是第一个章节,主要讲述sql解析和命令的分发部分。代码版本:mysql 8.0编程语言:c++ && c++11 && c++14 && c++17SQL语句是:create table test(c1 int primary key, c2 varchar(50))engine.原创 2021-05-20 15:59:32 · 2423 阅读 · 1 评论 -
详解AST抽象语法树
浅谈 AST先来看一下把一个简单的函数转换成AST之后的样子。 // 简单函数 function square(n) { return n * n; } // 转换后的AST { type: "FunctionDeclaration", id: { type: "Identifier", name: "square" }, params: [ { typ..转载 2021-04-29 15:44:55 · 1487 阅读 · 0 评论 -
raft协议中统计一条log被多少节点复制
在raft协议中,client的请求都会转化为一条log,并且只能由leader才能处理来自client的请求,如果一个log请求到了follower上,最后也会重定向到leader上的。好的,废话说多了,开始主题:raft协议中统计一条log被多少节点复制,在raft协议中,leader会统计由多少个节点已经复制了该log,如果超过一半的节点(包括leader)复制了该log(是复制,并没有落盘),那么leader就会提交该log,也即是将该log落盘。此外,log的复制是单向的,只能从leade原创 2021-04-14 11:52:39 · 93 阅读 · 0 评论 -
mysql - 内存表使用总结
部分转载:https://blog.csdn.net/hemeinvyiqiluoben/article/details/51222951?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t原创 2021-03-30 18:18:03 · 188 阅读 · 0 评论 -
Postgres主进程文件—postmaster.pid
postmaster内容使用cat -n命令可以查看postmaster.pid文件内容:)根据每一行进行解释,并给出对应的源代码说明13795: 代表Postgres主进程的PID /usr/local/pgsql/data: 代表数据目录 1529235109: 代表postmaster文件的创建时间。 5432: 代表数据库监听端口,在postgresql.conf中对应port = 5432 来自源代码说明:/* The socket numb.转载 2020-12-30 18:02:08 · 1517 阅读 · 2 评论 -
PostgreSQL的核心架构
应用程序的访问接口1. 访问接口总体图进程及内存结构1. 进程和内存结构图 主进程:Postmaster进程 辅助进程:SysLogger(系统日志)进程、BgWriter(后台写)进程、WALWrite(预写式日志)进程、PgArch(归档)进程、AutoVacuum(系统自动清理)进程、PgStat(统计收集)进程、CheckPoint()进程。 2. 主进程 Postmaster是整个数据库实例的总控进程,负责启动和关闭该数据库实例。3. Syslogg转载 2020-12-30 17:48:02 · 277 阅读 · 0 评论 -
PostgreSQL体系架构
PostgreSQL 使用客户机/服务器(C/S)的模式提供服务,一个PostgreSQL会话由下列相关的进程(程序)组成:(1)一个服务器端进程。该进程管理数据库文件,接受客户端与数据库的连接,且代表客户端对数据库进行操作。该进程的程序名叫做 postgres。(2)前端应用,即需要进行数据库操作的客户端应用。客户端应用可能本身就是多种多样的:它们可以是一个字符界 面的工具, 也可以是一个图形界面的应用,或者是一个通过访问数据库来显示网页的 web 服务器,或者是一个特殊的数据库管理工具。 一些.转载 2020-12-30 16:56:20 · 419 阅读 · 0 评论 -
三篇文章了解 TiDB 技术内幕——说存储
此文转载了申砾PingCAP的文章:https://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247484822&idx=1&sn=5434362800d8dcc0ca69d2f3f3260173&chksm=eb1622fcdc61abea428f74b26a24bc589d524dd3b666d9b124809300f488d00b33a315a87792&scene=21#wechat_redirect...转载 2020-12-17 14:34:23 · 407 阅读 · 0 评论 -
TiKV 源码解析系列 - Raft 的优化
在分布式领域,为了保证数据的一致性,通常都会使用 Paxos 或者 Raft 来实现。但 Paxos 以其复杂难懂著称,相反 Raft 则是非常简单易懂,所以现在很多新兴的数据库都采用 Raft 作为其底层一致性算法,包括我们的 TiKV。当然,Raft 虽然简单,但如果单纯的按照 Paper 的方式去实现,性能是不够的。所以还需要做很多的优化措施。本文假定用户已经熟悉并了解过 Raft 算法,所以对 Raft 不会做过多说明。(还不熟悉Raft,点这里:)TiKV 源码解析系列——如何使用 Raft.转载 2020-12-17 11:04:45 · 288 阅读 · 0 评论 -
sql 为什么要用where 1=1或者where 1 =0 ?
一、不用where 1=1 在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下:代码如下: string MySqlStr=”select * from table where”; if(Age.Text.Lenght>0) { MySqlStr=MySqlStr+“Age=“+“'Age.Text'“; } if(Address.Text...转载 2020-12-03 15:47:14 · 1043 阅读 · 0 评论 -
mysql innodb缓存策略之Buffer Pool
The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引,知道innodb bufferpool怎么工作,和利用它读取频繁访问的数据,是mysql优化重要的方面。 理想状况下,把bufferpool的大小调整到足够大,留下足够的内存空间给其他该服务器上的进程(使其无缺页即可)。bufferpool越大,innodb 月表现为内存型数据库,从硬盘上一次读取数据,之后并成了从内存中读取数据。buffer pool甚至缓存那...原创 2020-08-12 11:11:54 · 389 阅读 · 0 评论 -
MySQL主从复制作用和原理
该文章是转载的,但是原文中有些描述的不准确,进行了修改。一、什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。二、主从复制的作用1、做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。3、读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部转载 2020-08-07 11:34:52 · 417 阅读 · 0 评论 -
谓词/表达式下推
什么是谓词首先我们要了解什么是谓词。谓词,用来描述或判定客体性质、特征或者客体之间关系的词项。根据《现代汉语》的定义汉语的谓词包括动词和形容词。在SQL中,谓词就是返回boolean值即true和false的函数,或是隐式转换为bool的函数。SQL中的谓词主要有 LKIE、BETWEEN、IS NULL、IS NOT NULL、IN、EXISTS接下来了解什么是谓词下推谓词下推的基本思想即:将过滤表达式尽可能移动至靠近数据源的位置,以使真正执行时能直接跳过无关的数据。..转载 2020-07-15 15:30:45 · 316 阅读 · 0 评论 -
skiplist原理与实现
今天继续介绍分布式系统当中常用的数据结构,今天要介绍的数据结构非常了不起,和之前介绍的布隆过滤器一样,是一个功能强大原理简单的数据结构。并且它的缺点和短板更少,应用更加广泛,比如广泛使用的Redis就有用到它。SkipList简介SkipList是一个实现快速查找、增删数据的数据结构,可以做到O(logN)O(logN)复杂度的增删查。从时间复杂度上来看,似乎和平衡树差不多,但是和平衡树比较起来,它的编码复杂度更低,实现起来更加简单。学过数据结构的同学应该都有了解,平衡树经常需要旋转操作..转载 2020-06-13 18:53:33 · 496 阅读 · 0 评论 -
bloom filter
今天的文章和大家一起来学习大数据领域一个经常用到的算法——布隆过滤器。如果看过《数学之美》的同学对它应该并不陌生,它经常用在集合的判断上,在海量数据的场景当中用来快速地判断某个元素在不在一个庞大的集合当中。它的原理不难,但是设计非常巧妙,老实讲在看《数学之美》之前,我也没有听说过这个数据结构,所以这篇文章也是我自己学习的笔记。 原理在我之前的理解当中,如果想要判断某个元素在不在集合当中,经典的结构应该是平衡树和hash table。但是无论是哪一种方法,都逃不开一点,都需要存储原值...转载 2020-06-13 14:56:42 · 170 阅读 · 0 评论 -
LSM Tree
今天给大家分享的内容是LSM树,它的英文是Log-structed Merge-tree。看着有些发怵,但其实它的原理不难,和B树相比简直算是小儿科了。并且这也是一个非常经典的数据结构,并且在大数据系统当中有非常广泛的应用。有许多耳熟能详的经典系统,底层就是基于LSM树实现的。因此,今天就和大家一起来深入学习一下它的原理。背景知识首先,我们先从背景知识开始。我们之前介绍B+树的时候说过,B+树和B树最大的不同就是将所有的数据都放在了叶子节点。从而优化了我们批量插入以及批量查询的效率,而优化的核心转载 2020-06-13 14:29:44 · 353 阅读 · 0 评论 -
MySQL Innodb存储引擎使用B+树做索引的优点
对于数据库来说,索引和表数据都是存放在磁盘上的,一般使用B+树作为索引MySQL Innodb存储引擎使用了B+树作为索引的优点,主要有以下原因:1、索引和表数据都是存放在磁盘上的,如果磁盘上的数据量过大时,无法一次性的将数据装入到内存中,使用B+树作为索引可以将数据分批的装入到内存中.(所以没有使用二叉树或者红黑树)2、对于数据库来说,查找的是某一范围内的数据,如果使用B+树作为索引,最底层的每个节点中的数据是有序的使用单链表进行连接,便于数据的查询。(所以没有使用hash表,使用has...原创 2020-06-11 13:11:10 · 588 阅读 · 0 评论 -
在数据库中, 不用max()/min()找出一个列中最大/最小值的记录
不用max()/min()找出c1列中最大/最小值的记录// 找出c1列中,c1是最小值的那条记录,不能用min()select * from t1 where c1 <= all(select c1 from t1);// 找出c1列中,c1是最大值的那条记录,不能用max()select * from t1 where c1 >= all(select c1 from t1);...原创 2020-05-12 11:00:19 · 1305 阅读 · 0 评论 -
MySQL索引的一些问题
MySQL索引的一些问题注意:本文基于MySQL的InnoDB引擎说明。一、什么是最左前缀原则对于该表,如果按照name字段来建立索引的话,采用B+树结构,大概的索引如下:如果要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为:select ID from table where name like '张%'由于在B+树结构的索引中,叶子节点是一个有序的链表,当我们快速定位到 ID 为 100的张一后,可以直接向右遍历所有张开头的人,直到条件不满足转载 2020-05-09 13:43:35 · 224 阅读 · 0 评论 -
InnoDB一棵B+树可以存放多少行数据?
一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)他的最小单元是块,一个块的大小是4k,而对于我们的InnoDB存储引擎也有自己的最小储存单元——页(Page),一转载 2020-05-09 10:23:09 · 162 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主...转载 2020-03-06 13:50:56 · 168 阅读 · 0 评论 -
Rocksdb的优劣及应用场景分析
Rocksdb的优劣及应用场景分析Rocksdb也是一样,也有它的优势劣势及特定的适用场景。今天我就从设计的角度来分析一下。基础架构 上图就是Rocksdb的基础架构。Rocksdb中引入了ColumnFamily(列族, CF)的概念,所谓列族也就是一系列kv组成的数据集。所有的读写操作都需要先指定列族。写操作先写WAL,再写memtable,memtable...转载 2020-01-16 11:38:17 · 1133 阅读 · 0 评论 -
group by 的实现原理
转载:https://cloud.tencent.com/developer/article/1513067写过 Sql 的同学应该都知道 group by 是用来对数据进行分组的,一般与聚合函数一起使用,对分组后的数据进行聚合。虽然大家都在用,但是有些同学还是不太清楚 group by 的底层到底是如何实现分组并且最后进行聚合的。今天就讲讲 group by 的底层实现。我们直接来看例子...转载 2020-01-10 17:25:05 · 2108 阅读 · 1 评论 -
HDFS的特性以及如何保证数据的一致性
链接:https://www.nowcoder.com/questionTerminal/962225fa78e74ba7b1d7d7792407acc6?orderByHotValue=1&mutiTagIds=629&page=1&onlyReference=false主要有以下6点:1.安全模式:HDFS刚启动时,namenode进入安全模式,处于安全...转载 2020-01-02 14:14:21 · 2801 阅读 · 0 评论 -
行列存储方式比较
原文链接:https://blog.csdn.net/vagabond6/article/details/79555282写入:行存储的写入是一次完成,数据的完整性因此可以确定。列存储需要把一行记录拆分成单列保存,写入次数明显比行存储多。行存储在写入上占有很大的优势数据修改:行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入。行存储在数据修改也是占优的数据读取...转载 2019-12-27 16:57:14 · 599 阅读 · 0 评论 -
内存淘汰机制 LRU cache
LRU cache机制的目的是为了减少频繁查找的开销,包括磁盘IO等。(1)、如果LRU中存在则从LRU缓存中查找,查找到了之后放到容器(list)的最前面(2)、如果缓存中没有,则从其地方(数据库、磁盘、文件)中读取,读取之后放到容器的最前面(3)、用户设定缓存的大小例如:redis使用LRU机制来做内存淘汰机制其他关系型数据库使用LRU减少磁盘IO的消耗templ...原创 2019-12-14 16:36:00 · 342 阅读 · 0 评论 -
行存和列存的区别
写入:行存储的写入是一次完成,数据的完整性因此可以确定。列存储需要把一行记录拆分成单列保存,写入次数明显比行存储多。行存储在写入上占有很大的优势数据修改:行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入。行存储在数据修改也是占优的数据读取:行存储通常将一行数据完全读出,如果只需要其中几列数据,就会存在冗余列列存储每次读取的数据是集合中的一段或者全部。由于...转载 2019-12-11 13:07:31 · 991 阅读 · 0 评论 -
数据库索引的实现原理
转载:https://blog.csdn.net/kennyrose/article/details/7532032强烈建议参阅链接:http://www.linezing.com/blog/?p=798#nav-1说白了,索引问题就是一个查找问题。。。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据...转载 2019-12-08 22:51:55 · 835 阅读 · 0 评论 -
编译rocksdb源码导致的部署失败
这几天经历了一次心酸的历程,使用了rocksdb第三方库,编译器是7.2,rocksdb是20190701从github上取下来的,由于rocksdb自己的CMakeList.txt中使用了-march=native编译参数,强制使用了编译代码服务器的cpu指令集,由于是一个集群,集群中的服务器cpu型号信息不一定都一致,导致集群中部分服务器起不来。引起了大领导的关注,自己一下子提起了精神事情...原创 2019-10-12 18:11:41 · 789 阅读 · 0 评论