数据库
文章平均质量分 81
Coding Now
点点滴滴,皆是学问!
展开
-
用单库自增键来生成id了,后期怎么分库?哎,这个坑大!
星球水友“写代码的”提问:沈老师,我们现在用户中心是单库单表,uid使用数据库自增主键,uid被很多业务关联,不能变化。现在用户中心数据量逐步变大,有分库需求了,如何由单库升级为多库,保持历史uid不变,并且新生成的数据不冲突,有什么好办法么?==问题描述完==应该有不少公司都会利用数据库“插入数据自动自增id”来作为业务id,这种方法会使得业务与id生成强...转载 2019-10-22 11:37:58 · 193 阅读 · 0 评论 -
事务已提交,数据却丢了,赶紧检查下这个配置!!!
问题:MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,什么情况下可能导致“事务已经提交,数据却丢失”呢?这个问题有点复杂,且容我系统性梳理下思路,先从redo log说起吧。画外音:水友问的是MySQL,支持事务的是InnoDB,本文以InnoDB为例展开叙述,其他数据库不是很了解,但估计原理是相同的。为什么要有redo log...转载 2019-10-16 16:43:54 · 235 阅读 · 0 评论 -
Redis重点二:redis都有哪些数据类型?分别在哪些场景下使用比较合适?
redis都有哪些数据类型?分别在哪些场景下使用比较合适?除非是我感觉看你简历,就是工作3年以内的比较初级的一个同学,可能对技术没有很深入的研究过,我才会问这类问题,在宝贵的面试时间里,我实在是不想多问其实问这个问题呢。。。主要就俩原因第一,看看你到底有没有全面的了解redis有哪些功能,一般怎么来用,啥场景用什么,就怕你别就会最简单的kv操作第二,看看你在实际项目里都怎么玩儿过r...翻译 2019-05-23 22:26:52 · 175 阅读 · 0 评论 -
Redis重点三:过期策略和内存淘汰机制
redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?1)老师啊,我往redis里写的数据怎么没了?之前有同学问过我,说我们生产环境的redis怎么经常会丢掉一些数据?写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明redis你就没用对啊。redis是缓存,你给当存储了是吧?啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的...翻译 2019-05-23 22:35:27 · 167 阅读 · 0 评论 -
Redis重点四:保证redis高并发以及高可用一
1、redis高并发跟整个系统的高并发之间的关系redis,你要搞高并发的话,不可避免,要把底层的缓存搞得很好mysql,高并发,做到了,那么也是通过一系列复杂的分库分表,订单系统,事务要求的,QPS到几万,比较高了要做一些电商的商品详情页,真正的超高并发,QPS上十万,甚至是百万,一秒钟百万的请求量光是redis是不够的,但是redis是整个大型的缓存架构中,支撑高并发的架构里...翻译 2019-05-23 22:51:41 · 227 阅读 · 0 评论 -
Redis重点五:怎么保证redis高并发以及高可用二
1、什么是99.99%高可用?架构上,高可用性,99.99%的高可用性讲的学术,99.99%,公式,系统可用的时间 / 系统故障的时间,365天,在365天 * 99.99%的时间内,你的系统都是可以哗哗对外提供服务的,那就是高可用性,99.99%系统可用的时间 / 总的时间 = 高可用性,然后会对各种时间的概念,说一大堆解释2、redis不可用是什么?单实例不可用?主从架构...翻译 2019-05-24 20:15:26 · 216 阅读 · 0 评论 -
MySQL小结及性能优化(查看执行计划)
逻辑架构图11.Connectors指的是不同语言中与SQL的交互2.Management Serveices & Utilities:系统管理和控制工具3.Connection Pool: 连接池*管理缓冲用户连接,线程处理等需要缓存的需求。*负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理...原创 2019-09-16 15:06:34 · 734 阅读 · 2 评论 -
MySQL的自增ID用完了怎么办???
以前就有过这样的疑问,最近在学习MySQL这一块,突然又想到了这个问题,就自己动手实验了一下,请看过程。先创建一张简单的表,插入一条数据create table test(id int unsigned auto_increment primary key);insert into test values(null);查看一下表情况,show create table te...原创 2019-09-18 13:02:31 · 948 阅读 · 0 评论 -
分库分表二:怎么进行分库分表以及数据迁移
有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?已经明白为啥要分库分表了,你也知道常用的分库分表中间件了,你也设计好你们如何分库分表的方案了(水平拆分、垂直拆分、分表),那问题来了,你接下来该怎么把你那个单库单表的系统给迁移到分库分表上去?友情提示假设,你现有有一个单库单表的系统,在线上在跑,假设单表有600万数据3个库,每个库里分了4...翻译 2019-05-22 11:29:25 · 3461 阅读 · 13 评论 -
分库分表三:设计可以动态扩容缩容的分库分表方案
如何设计可以动态扩容缩容的分库分表方案?(1)选择一个数据库中间件,调研、学习、测试(2)设计你的分库分表的一个方案,你要分成多少个库,每个库分成多少个表,3个库每个库4个表(3)基于选择好的数据库中间件,以及在测试环境建立好的分库分表的环境,然后测试一下能否正常进行分库分表的读写(4)完成单库单表到分库分表的迁移,双写方案(5)线上系统开始基于分库分表对外提供服务(...翻译 2019-05-22 11:35:02 · 723 阅读 · 2 评论 -
分库分表四:分库分表全局id主键
分库分表之后,id主键如何处理?分库分表之后必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持。所以这都是你实际生产环境中必须考虑的问题。(1)数据库自增id这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id。拿到这个id之后再往对应的分...翻译 2019-05-22 12:40:40 · 922 阅读 · 0 评论 -
业务发展太快数据量太大怎么办?并发太高怎么办?--分库分表与mycat
最近在集中精力怼mysql数据库,今晚总结一下分库分表实现和mycat的使用:分库分表是什么??(参考文章https://blog.csdn.net/qq_41864967/article/details/90439932)分库分表一定是为了支撑高并发、数据量大两个问题的。我之前的几篇分库分表的文章也是讲的很清楚了。现在主要讲一下Mycat的使用与分库分表的关系。数据的切分分为两种...原创 2019-09-19 14:13:35 · 524 阅读 · 0 评论 -
Redis重点一:redis线程模型,单线程为啥很快?
redis和memcached有什么区别?redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多(为什么redis是单线程的但是还可以支撑高并发)?这个是问redis的时候,最基本的问题吧,redis最基本的一个内部原理和特点,就是redis实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿redis的时候,出了问题岂不是什么都不知道?还有可能面...翻译 2019-05-23 22:20:35 · 687 阅读 · 0 评论 -
MySQL读写分离,主从赋值以及主从同步延时
有没有做MySQL读写分离?如何实现mysql的读写分离?MySQL主从复制原理的是啥?如何解决mysql主从同步的延时问题?高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?(1)如何实现mysq...翻译 2019-05-22 12:45:44 · 471 阅读 · 0 评论 -
Mysql数据引擎MyISAM和InnoDb
MyISAM:不支持事务,但是每次查询都是原子的;支持表级锁,即每次操作是对整个表加锁;存储表的总行数;一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性 InnoDb支持ACID的事务,支持事务的四种隔离级别;支持行级锁及外键约...原创 2018-12-18 21:27:37 · 183 阅读 · 0 评论 -
数据库索引
索引:用于提升数据库的查找速度索引是建立得越多越好吗 (No)➢数据量小的表不需要建立索引,建立会增加额外的索引开销➢数据变更需要维护索引,因此更多的索引意味着更多的维护成本➢更多的索引意味着也需要更多的空间问题:哈希(hash)比树(tree)更快,索引结构为什么要设计成树型?为了加快查找速度的数据结构,常见的有两类:(1)哈希,例如HashMap,查询/插入/修改...原创 2018-12-18 21:45:08 · 140 阅读 · 0 评论 -
Mysql优化相关
概述为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比如何优化设计数据库时:数据库表、字段的设计,存储引擎 利用好MySQL自身提供的功能,如索引等 横向扩展:MySQL集群、负载均衡、读写分离 SQL语句的优化(收效甚微)字段设计字段类型的选择,...原创 2018-12-31 22:08:18 · 4062 阅读 · 0 评论 -
redis基础及持久化方式
为什么Redis能这么快100000+QPS(QPS即querypersecond,每秒内查询次数)➢完全基于内存,绝大部分请求是纯粹的内存操作,执行效率高➢数据结构简单,对数据操作也简单➢采用单线程,单线程也能处理高并发请求,想多核也可启动多实例➢使用多路I/O复用模型,非阻塞IORedis的数据类型 供用户使用的数据类型 ➢String ...原创 2019-02-23 22:01:18 · 186 阅读 · 0 评论 -
redis学习笔记------主从复制
在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave),如图所示。假设现在有两个Redis服务器,地址分别为127.0.0.1:6379和127.0.0.1:12345,如果我们向服务器127.0.0.1:...原创 2019-03-10 21:53:22 · 197 阅读 · 0 评论 -
redis学习笔记----哨兵机制(Sentinel)
Redis哨兵模式-----Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。Redis 的 Sentinel 系统用于管理多个 Redis ...原创 2019-03-11 13:49:04 · 439 阅读 · 0 评论 -
redis学习笔记----redis集群(Redis Cluster)
前言: Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。这里讲一下集群的节点、槽指派、命令执行、重新分片、转向、故障转移、消息等。1.节点 一个redis集群由多个节点(node)组成, CLUSTER MEET <ip> <port> 握手 ...原创 2019-03-12 00:03:45 · 330 阅读 · 0 评论 -
redis学习笔记------事务(transaction)
前言:Redis通过MULTI、EXEU、WATCH(乐观锁)等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。事务首先以MUTLI命令开始,接着将多个命令放入事务中,最...原创 2019-03-12 13:26:30 · 506 阅读 · 0 评论 -
一条SQL查询语句如何执行的???
首先介绍一下MySQL:mysql是关系数据库,但是说白了是一个软件。在我们复杂的软件世界中,大概分为那么两种软件,一种是CPU密集型,一种是I/O密集型。有这个思想很重要,比如面试官经常问你: redis为什么是单线程; 大数据word count用mapduce好吗; 这类问题,首先你就是要区分是CPU密集型还是I/O密集型。而作为一个数据库,显然是一个I/O密集型的软...转载 2019-05-06 23:12:42 · 206 阅读 · 0 评论 -
Redis重点六:怎么保证redis挂掉之后重启数据可以恢复?
redis的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?redis如果仅仅只是将数据缓存在内存里面,如果redis宕机了,再重启,内存里的数据就全部都弄丢了啊。。。。。。你必须得用redis的持久化机制,将数据写入内存的同时,异步的慢慢的将数据写入磁盘文件里,进行持久化如果redis宕机了,重启启动,自动从磁盘上加载之前持久化的一些数据,就可以...翻译 2019-05-24 20:23:24 · 18730 阅读 · 0 评论 -
分库分表一:由来和拆分
Q:为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?A:分库分表一定是为了支撑高并发、数据量大两个问题的。剖析:(1)为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)说白了,分库分表是两回事儿,大家可别搞混了,可能是光分库不分表...翻译 2019-05-22 11:22:03 · 272 阅读 · 0 评论 -
数据库乐观锁和悲观锁
1.乐观锁 认为数据的更新在大多数情况下是不会产生冲突的,只在数据库更新操作提交的时候才对数据作冲突检测。如果检测的结果出现了与预期数据不一致的情况,则返回失败信息。实现方法: 1.借助版本号version 数据库表增加一个版本号的字段version,每次更新一行记录,都使得该行版本号加一,开始更新之前先获取version的值,更新提交的时候带上之前获取的versio...原创 2018-12-19 22:15:24 · 328 阅读 · 0 评论