0

Redis是如何持久化到硬盘的

Redis为什么需要持久化我们在项目中或多或少会用到Redis,Redis主要用作缓存数据库。使用Redis可以大大提升我们程序是性能,使用Redis之所以快的原因之一是Redis的数据是存储在内存中,应用程序访问Redis只需要从内存中读取即可。从内存中读取数据确实能提高访问速度,但是当Redis挂了,内存中的数据就会丢失掉,为了防止数据丢失,我们需要将数据持久化到硬盘中。当Redis挂了,数据已经存储到硬盘中了,Redis重启后,硬盘中的数据就会重新加载到内存中。那么,问题来了。Redis是如何持久化的?两种持久化方式在Redis中提供了两种不同的持久化方式:RDB和AOF。RDB持久化方...

阅读全文>>

0

线上MySQL读写分离,出现写完读不到问题如何解决?

今天我们来详细了解一下主从同步延迟时读写分离发生写后读不到的问题,依次讲解问题出现的原因,解决策略以及 Sharding-jdbc、MyCat 和 MaxScale 等开源数据库中间件具体的实现方案。一、写后读不到问题MySQL 经典的一主两从三节点架构是大多数创业公司初期使用的主流数据存储方案之一,主节点处理写操作,两个从节点处理读操作,分摊了主库的压力。但是,有时候可能会遇到执行完写操作后,立刻去读发现读不到或者读到旧状态的尴尬场景。这是由于主从同步可能存在延迟,在主节点执行完写操作,再去从节点执行读操作,读取了之前旧的状态。上图展示了此类问题出现的操作顺序示意图:客户端首先通过代理向主节...

阅读全文>>

0

SQLServer数据库实例相关知识笔记

1、概念介绍SQL实例实际上就是SQL服务器引擎,每个SQL Server数据库引擎实例各有一套不为其他实例共享的系统及用户数据库。在一台计算机上,可以安装多个SQL SERVER,每个SQL SERVER就可以理解为是一个数据库实例。2、SQL实例分类SQL实例分为默认实例和命名实例。这个在SQLServer软件安装时候可以选择哪种命名方式,但一台计算机中只能有一个实例作为默认实例,其余的都只能是命名实例。2.1 默认实例:实例名称为MSSQLSERVER,一般情况下默认实例名与计算机名称相同。后续计算机名称是可以修改的,修改后对不会影响默认实例。可以指定计算机名称/本机Ip地址来访问默认实...

阅读全文>>

0

Redis如何实现分布式锁?

前言如果在一个分布式系统中,我们从数据库中读取一个数据,然后修改保存,这种情况很容易遇到并发问题。因为读取和更新保存不是一个原子操作,在并发时就会导致数据的不正确。这种场景其实并不少见,比如电商秒杀活动,库存数量的更新就会遇到。如果是单机应用,直接使用本地锁就可以避免。如果是分布式应用,本地锁派不上用场,这时就需要引入分布式锁来解决。由此可见分布式锁的目的其实很简单,就是为了保证多台服务器在执行某一段代码时保证只有一台服务器执行。为了保证分布式锁的可用性,至少要确保锁的实现要同时满足以下几点:互斥性。在任何时刻,保证只有一个客户端持有锁。不能出现死锁。如果在一个客户端持有锁的期间,这个客户端崩...

阅读全文>>

0

「MySQL笔记」left join-on-and 与 left join-on-where 的区别

1. 摘要关于这两种写法的重要知识点摘要如下:left-join 时,即使有相同的查询条件,二者的查询结果集也不同,原因是优先级导致的,on 的优先级比 where 高on-and 是进行韦恩运算连接生成临时表时使用的条件where 是全部连接完生成临时表后,再根据条件过滤on 优先级比 where 高,因此,理论上 on-and 写法执行效率比 on-where 高,速度更快inner-join 时,不管是对左表还是右表进行筛选,on-and 和 on-where 都会对生成的临时表进行过滤2. 这两种写法有什么区别两者放置相同条件,之所以可能会导致结果集不同,就是因为优先级。on的优先级是...

阅读全文>>

0

Oracle与Mysql区别

1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。 2. Oracle支持大并发,大访问量,是OLTP最好的工具。 3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。 4. Oracle也Mysql操作上的一些区别 ①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Orac...

阅读全文>>

0

为什么delete表数据,磁盘空间却还是被占用

最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多。为了节约成本,定期进行数据备份,并通过delete删除表记录。明明已经执行了delete,可表文件的大小却没减小,令人费解项目中使用Mysql作为数据库,对于表来说,一般为表结构和表数据。表结构占用空间都是比较小的,一般都是表数据占用的空间。当我们使用 delete删除数据时,确实删除了表中的数据记录,但查看表文件大小却没什么变化。Mysql数据结构凡是使用过mysql,对B+树肯定是有所耳闻的,MySQL InnoDB 中采用了 B+ 树作为存储数据的结构,也就是常说的索引组织表,并且数据时...

阅读全文>>

0

MySQL:按照ID分组日期时间求和,过滤重叠时间

原始数据SELECT d.waybill_no, @group_row:=CASE WHEN @parent_code=picked_by THEN @group_row+1 ELSE 1 END AS id, @parent_code1:=picked_by AS picked_by1, MIN(spd.picked_date) start_time, MAX(spd.picked_date) end_time, TIMESTAMPDIFF(HOUR,MIN(spd.picked_date),MAX(spd.picked_date)) times, spd.picked_by FROM `...

阅读全文>>

0

海量数据写入——万级并发的订单系统如何分库?

一定要分表分库吗?当然不一定。虽然很多互联网公司的体量很大、用户非常多,但你千万不要被这些现象迷惑了。实际上,90% 以上的系统能够发展到上百万、上千万数据量已经很不错了。对于千万的数据量,开源的 MySQL 都可以很好地应对,更别说一些商业数据库了。另外,当数据增长到一定量级后,可以在业务层面做一些处理。比如根据业务特点,对无效数据、软删除数据,以及业务上不会再查询的数据进行统一归档,这也是一个成本低、效果明显的方式了。一定要分库吗?说到分库,他当然能够解决存储的问题,假设原先单库只能最多存储2千万的数据量。采用分库之后,存储架构变成下图所示的分库架构,每个分库都可以存储2千万数据量,容量的...

阅读全文>>

0

mysql-DCL语句与帮助的使用

DCL语句DCL语句主要是DBA用来管理系统中的对象权限时使用,一般的开发人员很少使用。下面通过一个例子简单说明一下。创建一个数据库用户z1,具有对sakila数据库中所有表的SELECT/INSERT 权限,并且密码为123。grant select,insert on sakila.* to ‘z1’@’localhost‘indentified by ‘123’;收回z1的insert权限。revoke insert on sakila.* from ‘z1’@’localhost’;帮助的使用输入‘? contents’ 就可以查看mysql中一些提供帮助的内容。输入’? data t...

阅读全文>>