数据库相关
文章平均质量分 75
王小二(海阔天空)
这个作者很懒,什么都没留下…
展开
-
Redis:浅谈Redis集群的复制原理
每个master也持有一个偏移量offset,master将自己产生的复制流发送给slave时,发送多少个字节的数据,自身的偏移量就会增加多少,目的是当有新的操作修改自己的数据集时,它可以以此更新slave的状态。一个master可以拥有多个slave,slave可以接受其他slave的连接。当一个master实例和一个slave实例连接正常时, master 会发送一连串的命令流来保持对slave的更新,以便于将自身数据集的改变复制给 slave , 包括客户端的写入、key的过期或被逐出等等。原创 2024-09-01 19:44:21 · 998 阅读 · 0 评论 -
缓存:浅谈缓存穿透、缓存击穿、缓存雪崩等
缓存穿透:缓存不存在,数据库不存在,高并发,少量key缓存击穿:缓存不存在,数据库存在,高并发,少量key缓存雪崩:缓存不存在,数据库存在,高并发,大量key。原创 2024-09-02 09:00:00 · 1321 阅读 · 0 评论 -
Redis:浅谈Redis持久化机制-RDB和AOF
Redis提供了两种持久化方式:1、RDB持久化:在指定的时间间隔对数据进行快照存储。2、AOF持久化:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。也可以同时开启两种持久化方式,在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据。原创 2024-09-02 08:00:00 · 676 阅读 · 0 评论 -
缓存:浅谈双写导致的数据一致性问题
从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力更新即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。我们讨论三种更新策略:1、先更新缓存,再更新数据库。(不可取)2、先更新数据库,再更新缓存。(不可取)3、先删除缓存,再更新数据库。(不可取)原创 2024-08-31 08:00:00 · 1175 阅读 · 0 评论 -
MySQL:简述数据库的主从复制
MySQL主从复制是指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主节点来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主节点中的所有数据库或者特定的数据库,或者特定的表。原创 2024-08-29 13:43:00 · 616 阅读 · 0 评论 -
MySQL:简述多版本并发控制MVCC
Read View遵循的可见性算法主要是将要被修改的数据的最新记录中的DB_TRX_ID(当前事务id)取出来,与系统当前其他活跃事务的id去对比,如果DB_TRX_ID跟Read View的属性做了比较,不符合可见性,那么就通过DB_ROLL_PTR回滚指针去取出undolog中的DB_TRX_ID做比较,即遍历链表中的DB_TRX_ID,直到找到满足条件的DB_TRX_ID,这个DB_TRX_ID所在的旧记录就是当前事务能看到的最新老版本数据。(1)在事务3修改该行数据的时,数据库会对该行加排他锁。原创 2024-08-29 11:51:58 · 1116 阅读 · 0 评论 -
MySQL:使用explain查看执行计划优化SQL
官网地址:为了优化SQL语句,需要查看SQL语句的具体执行过程,可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。执行计划的结果指标如下所示,核心的用红框标出来了。原创 2024-08-28 18:07:47 · 1089 阅读 · 0 评论 -
MySQL:SQL调优的简单实践
记一次简单的SQL优化实践。原创 2024-08-28 17:26:07 · 1187 阅读 · 1 评论 -
MySQL:简述事务的SQL操作
MySQL默认操作模式就是AutoCommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置AutoCommit的值改变是否是自动提交AutoCommit模式。关闭自动提交,每次sql必须通过commit命令提交.只能查询此刻正在进行中的事务,已经完成的是查不到的。(1)读未提交:READ-UNCOMMITTED。(3)可重复读:REPEATABLE-READ。(2)读已提交:READ-COMMITTED。更改当前锁超时时间为120秒。原创 2024-08-28 16:02:38 · 635 阅读 · 1 评论 -
MySQL:简述对事务的认识
MVCC,全称多版本并发控制。InnoDB 每个聚集索引都有 4 个隐藏字段,分别是主键(RowID),最近更改的事务 ID(MVCC 核心),Undo Log 的指针(隔离核心),索引删除标记(当删除时,不会立即删除,而是打标记,然后异步删除)。本质上,MVCC 就是用 Undo Log 链表实现。MVCC 的实现方式:事务以排它锁的方式修改原始数据,把修改前的数据存放于 Undo Log,通过回滚指针与数据关联,如果修改成功,什么都不做,如果修改失败,则恢复 Undo Log 中的数据。原创 2024-08-28 15:45:10 · 1261 阅读 · 0 评论 -
MySQL:简述对B树和B+树的认识
MySQL的索引使用B+树结构。原创 2024-08-28 14:22:55 · 543 阅读 · 0 评论 -
MySQL:简述对索引的认识
索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容。索引的优点:1. 天生排序;2. 快速查找。索引的缺点:1. 占用空间;2. 降低更新表的速度。**注意:**小表使用全表扫描更快,中大表才使用索引。超级大表索引基本无效。原创 2024-08-28 13:57:39 · 1761 阅读 · 0 评论 -
缓存:Redis 和 Memcached 的区别和共同点
Redis 和 Memcached 的区别和共同点原创 2022-10-24 15:58:07 · 275 阅读 · 0 评论 -
MySQL:timestamp使用CURRENT_TIMESTAMP报错问题
项目出现如下错误:Error updating database. Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'createTime' cannot be null数据模型如下: /* 创建时间不可为空*/ createTime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , /原创 2021-02-25 14:06:12 · 4826 阅读 · 0 评论 -
MySQL:实现数据排序的功能
(1)mysql单个字段降序排序:select * from table order by id desc;(2)mysql单个字段升序排序:select * from table order by id asc;(3)mysql多个字段排序:select * from table order by id desc,name desc;表示先按照id降序排序,再按照name降序排序。order by id desc,name desc; 表示先按照id降序排序,再按照name升序排序原创 2020-12-08 11:22:27 · 706 阅读 · 1 评论 -
MySQL:常用的MySQL优化工具
影响数据库性能的常见因素如下:(1)磁盘IO;(2)网卡流量;(3)服务器硬件;(4)SQL查询速度。下面介绍几个mysql 优化的工具,可以使用它们对MySQL进行检查,生成awr报告,从整体上把握数据库的性能情况。一、MySQLTunerMySQLTuner是MySQL一个常用的数据库性能诊断工具,主要检查参数设置的合理性,包括日志文件、存储引擎、安全建议及性能分析。针对潜在的问题,给出改进的建议,帮助进行MySQL优化。MySQLTuner支持MySQL / MariaDB / Perc原创 2020-05-21 10:37:07 · 4988 阅读 · 1 评论 -
Druid:简述对数据库连接池Druid的认识和使用
一、Druid介绍Druid是一个数据库连接池,可以说是目前最好的!因其优秀的功能、性能和扩展性方面,深受开发人员的青睐。阿里巴巴已经部署了超过600个使用Druid的应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!Druid的主要功能如下:一个高效、功能强大、可扩展性好的数据库连接池。可以监控数据库访问性能。进行数据库密码加密 ...原创 2019-12-04 10:08:56 · 872 阅读 · 0 评论 -
PageHelper:简述对物理分页插件PageHelper的认识
PageHelper是一款好用的,开源的,免费的Mybatis第三方物理分页插件。本文简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实现原理。一、PageHelper的maven依赖及插件配置PageHelper除了本身的jar包外,它还依赖了一个叫jsqlparser的jar包,使用时,我们不需要单独指定jsqlparser的...原创 2019-12-03 11:03:10 · 3014 阅读 · 1 评论 -
数据库:简述分页查询的优化方案
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多优化的方案。下面简单说一些方法。一、一般分页查询一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下:select * from table limit number1,number2select * from...原创 2019-12-02 21:26:09 · 637 阅读 · 0 评论 -
Redis教程:Redis缓存和MySQL实现一致性
在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。一般都是按照下图的流程来进行业务操作。按照这个流程,读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。不管是先写MySQL数据库,再删除R...原创 2019-11-23 17:24:52 · 634 阅读 · 0 评论 -
Redis教程:提高Redis效率的小技巧
一、keys很多Redis的使用者因为使用keys这个命令,导致出现性能毛刺。这个命令的时间复杂度是O(N),而且Redis又是单线程执行,在执行keys时即使是时间复杂度只有O(1)例如SET或者GET这种简单命令也会堵塞,从而导致这个时间点性能抖动,甚至可能出现timeout。所以强烈建议生产环境屏蔽keys命令,屏蔽方法如下:二、scanscan命令是keys命令的替代者。如果把key...原创 2019-11-23 15:55:27 · 1260 阅读 · 0 评论 -
数据库:简述对分布式数据库的认识
所谓的分布式数据库技术,就是结合了数据库技术与分布式技术的一种结合。具体指的是把那些在地理意义上分散开的各个数据库节点,但在计算机系统逻辑上又是属于同一个系统的数据结合起来的一种数据库技术。既有着数据库间的协调性也有着数据的分布性。这个系统并不注重系统的集中控制,而是注重每个数据库节点的自治性,此外,为了让程序员能够在编写程序时可以减轻工作量以及系统出错的可能性,一般都是完全不考虑数据的分布情况...原创 2019-11-11 20:21:26 · 861 阅读 · 0 评论 -
数据库:关系型数据库和非关系型数据库的区别
1. 存储方式传统的关系型数据库采用表格的储存方式, 数据以行和列的方式进行存储,要读取和查询都十分方便。而非关系型数据不适合这样的表格存储方式,通常以数据集的方式,大量的数据集中存储在一起,类似于键值对、图结构或者文档。2. 存储结构关系型数据库按照结构化的方法存储数据, 每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和...原创 2019-11-11 20:17:35 · 2757 阅读 · 0 评论 -
数据库:简述对非关系型数据库(NoSQL)的认识
一、非关系型数据库的概念随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。NoSQL数据库指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来说就是一个分布式系统不可能满足可...原创 2019-11-11 20:08:24 · 3057 阅读 · 0 评论 -
数据库:简述对数据库的认识
《数据库:简述对关系型数据库的认识》《数据库:简述对非关系型数据库的认识》《数据库:关系型数据库和非关系型数据库的区别》《数据库:简述对分布式数据库的认识》一、数据库的定义数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所。用户可以对文件中的数据进行新增、查询、更新、删除等...原创 2019-11-11 20:25:31 · 12085 阅读 · 0 评论 -
Redis:Redis的概念及各项功能
Redis:简述Redis 的概念及各项功能一、Redis简介官方简介:Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统,你可以把它作为数据库,缓存和消息中间件来使用。同时支持strings,lists,hashes,sets,sorted sets,bitmaps,hyperloglogs和geospatial indexes等数据类型。它还内建了复制...原创 2019-09-21 17:21:56 · 368 阅读 · 0 评论 -
Redis:简述Redis的数据淘汰策略
Redis:简述Redis的数据淘汰机制Redis在每个服务客户端执行一个命令的时候,都会先检测使用的内存是否超额。在Redis中,我们可以设置Redis的最大使用内存大小(server.maxmemory)。当Redis内存数据集大小上升到一定程度的时候,就会施行数据淘汰机制。Redis提供了一下6种数据淘汰机制:volatile-lru :从已设置过期时间的数据集(server.db...原创 2019-02-27 14:19:38 · 1048 阅读 · 0 评论 -
SQL语句:where条件后写上1=1是为了什么
SQL语句:where条件后写上1=1是为了什么String sql="select * from table_name where 1=1";if( conditon 1) { sql=sql+" and var2=value2";}if(conditon 2) { sql=sql+" and var3=value3";}上述代码是为了实现动态的SQL查询语句,...原创 2019-06-24 17:11:46 · 6338 阅读 · 0 评论 -
MySQL:如何对查询的结果集添加自增序号
MySQL:如何对查询的结果集添加自增序号 在MySQL中,当我们所要查询的结果集没有ID字段时,为方便前台展示等业务需求,需要添加一个自增的序号字段(ID)。语法如下:SELECT (@i:=@i+1) 别名1,表字段信息 FROM 表名, (SELECT @i:=0) AS 别名2 &nbs...原创 2019-04-26 10:19:46 · 9399 阅读 · 0 评论 -
SQL语句:简述对SQL注入的认识
SQL语句:简述对SQL注入攻击的认识一、SQL 注入攻击介绍 官方的说法为:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。即把恶意的 Sql 语句插入到输入参数中,然后通过在后台 Sql 服务器上解析-执行进行的攻击,它目前黑客对数据库进行攻击的最常...原创 2019-04-10 17:12:36 · 698 阅读 · 0 评论 -
SQL语句:简述SQL中的部分函数
SQL语句:简述SQL中的部分函数1.AVG:AVG 函数用于返回数列的平均值。语法:Select avg(字段名) from 表名。例子:Select avg(count) AS count_avg from access_log。2.Count:Count 函数用于返回配置指定条件的函数语法:1)返回指定列的值得数目:Select count(字段名) from 表名。2)返回...原创 2019-03-04 16:22:38 · 697 阅读 · 0 评论 -
SQL语句:简述DML、DDL、DQL、DCL的区别
数据库:简述DML、DDL、DCL的区别一、DML DML(data manipulation language)数据操纵语言:就是我们最经常用到的 SELECT、UPDATE、INSERT、DELETE。 主要用来对数据库的数据进行一些操作。SELECT 列名称 FROM 表名称UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值INSERT INTO tab...原创 2018-11-30 13:42:12 · 1205 阅读 · 0 评论 -
SQL语句:update语句的一个“经典坑”
SQL语句:update语句的一个小坑数据库中的表内容如下:语句1 :update apps set owner_code='43212' and owner_name='李四' where owner_code='13245' and owner_name='张三'; 问 :语句是否有语法问题?执行结果是什么?答 :语句无语法问题,执行后数据库结果如下:语句2 :updat...原创 2018-11-29 14:23:55 · 2582 阅读 · 0 评论 -
MySQL:日期,字符串,时间戳之间的互相转换
MySQL:日期,字符串,时间戳之间的互相转换原创 2019-01-02 17:43:40 · 485 阅读 · 0 评论 -
MySQL:简述MySQL取整函数
MySQL:简述MySQL取整函数MySQL取整函数1.ceil()/ceiling() 向上取整ex: ceil(1.2) = 22.floor() 向下取整ex: floor(1.2) = 13.round() 四舍五入原创 2019-01-02 17:06:03 · 697 阅读 · 0 评论 -
MySQL:如何对数据库中数据保留小数
MySQL:数据库中数据如何保留小数1、round(x,d) :用于数据的四舍五入,round(x) ,其实就是round(x,0),也就是默认d为0;这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;SELECT ROUND(100.3465,2),ROUND(100,2),ROUND(0.6,2),ROUND(114.6,-1);结果分别...原创 2019-01-02 16:53:52 · 11674 阅读 · 0 评论 -
MySQL:简述MySQL外键约束
MySQL:简述MySQL的外键约束MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。1、外键约束的含义:原创 2019-01-11 11:39:48 · 1663 阅读 · 0 评论 -
MySQL:数据库如何允许导入大型sql文件
3、交 互 等 待 时 间:interactive_timeout = 2880000。1、允许最大的sql的大小:max_allowed_packet=4096M。2、执 行 等 待 时 间: wait_timeout=2880000。原创 2018-01-08 19:56:39 · 587 阅读 · 0 评论 -
MySQL:简述MySQL中的视图(View)
MySQL:简述MySQL中的视图(View)1、什么是视图?       视图是一个虚拟表,其内容由查询语句定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图中行和列的数据来自定义视图的查询语句所引用的表,并且在引用视图时动态生成。并不在数据库中以存原创 2018-12-19 15:07:39 · 1087 阅读 · 0 评论 -
MySQL:replace into用法总结
MySQL:replace into用法总结replace跟insert的功能类似,区别在于:     1.replace 在将数据插入表中之前先判断是否存在此条数据,如果存在先删除此条数据,不存在直接插入数据。(注意:判断的条件是主键或者唯一索引,插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数原创 2018-11-06 16:58:56 · 2004 阅读 · 0 评论