数据库
文章平均质量分 88
最爱彩虹糖
学习中
展开
-
Mysql insert on duplicate key 死锁问题定位与解决
前言 最近在监测线上日志时发现我们一个Mysql业务db时常出现 dead lock,频次不高但却一直出现,定位后发现是在并发场景下的 insert on duplicate key update sql 出现的死锁。经过分析发现这种sql确实比较容易造成死锁,不太适用于我们目前的业务场景,于是更换后解决问题。 这篇文章就从分析死锁展开,到最终如何解决这样的问题 分享相应的思路。正文死锁定位原创 2022-05-02 22:37:03 · 11224 阅读 · 7 评论 -
数据库与缓存一致性方案分享
做C端相关业务,目前主流的关系型数据库在高并发的查询请求场景下,很难做到低延迟的高并发,甚至有可能被打挂。因此引入缓存中间件是一个常见的解决方案,但如何保证缓存与数据库的一致性,便成为了一个棘手的问题,这次我们拿常见的Mysql和Redis举例。原创 2022-01-08 17:49:23 · 947 阅读 · 0 评论 -
从一次主键查询乱序来看Mysql查询优化原理
前言 Mysql作为目前相对流行的关系型数据库,以各种演化形式存在于目前的it公司中,以B+树为基础的存储结构能够带来很高的查询效率,但是也随着单表存储行数递增以及存储空间增大,受制于B+树层数以及缓存页空间,查询效率会急剧下降。因此数据归档便是一个很正常技术需求,归档一般是需要全表扫描来对数据进行筛选,今天想记录的场景便是在进行数据归档时的一些sql查询主键乱序问题。正文背景 下面是我们的g原创 2021-12-26 16:35:32 · 1072 阅读 · 1 评论 -
基于zset与bloom filter的排行榜与点赞方案设计
前言 最近有做较多关于排行榜需求相关迭代,在这期间关于技术方案也进行了很多的思考和调研,到底采用哪种方式更贴合业务,在不过度设计的基础上多多考虑扩展性和稳定性,最终选型中有Mysql、Redis zset、bloom filter等技术,因此在这里做个总结与分享。 排行榜和feed流中个人数据进行点赞的需求很常见,如下图所示为一个排行榜的展示大概展示内容,包括用户基本信息、排行、排行所依赖的数据、原创 2021-01-02 20:36:13 · 807 阅读 · 0 评论 -
Mysql大表update的正确姿势
前言 有些时候在进行一些业务迭代时需要我们对Mysql表中数据进行全表update,如果是在数据量比较小的情况下(万级别),可以直接执行sql语句,但是如果数据量达到一个量级后,就会出现一些问题,比如主从架构部署的Mysql,主从同步需要需要binlog来完成,而binlog格式如下,其中使用statement和row格式的主从同步之间binlog在update情况下的展示:格式内容statement记录同步在主库上执行的每一条原创 2020-11-20 20:41:53 · 5091 阅读 · 0 评论 -
记一次线上问题排查引发数据库事务与分布式锁的思考
背景 这周有用户反馈关于某个服务数据异常无法正常展示,在后台看日志是server在从数据库中查询完数据,使用Java stream聚合数据时出现了唯一用户 —— 唯一物品的多条数据(隐去业务具体字段名称,以用户、物品作为此次问题的字段),这些异常数据在我们的业务逻辑中是不应该出现的,且通过日志和代码在问题定位的过程中也是相对比较坎坷,因此记录分享一下。正文业务逻辑与日志信息 如下所示为我们整个原创 2020-07-17 22:15:42 · 529 阅读 · 0 评论 -
正排索引与倒排索引的理解
前言 最近在学习调研ElasticSearch,ES是一款热度较高的开源搜索服务器,能够提供近实时的数据全文检索功能,而实现检索功能一个其中较为重要的思想就是使用倒排索引,之所以成为倒排,与我们关系型数据库如Mysql的正排索引的区别在哪?在这篇文章总结一下我对两种索引的理解。正文正排索引 拿Mysql Innodb的聚簇索引来说,如下图所示,一个极简版(无页属性)的B+树索引结构大概是这样,原创 2020-07-11 20:42:03 · 2519 阅读 · 0 评论 -
Redis多种部署方式及交互原理
前言 Redis作为目前使用较为广泛的中间件之一,大量使用于缓存、分布式锁、业务排行榜甚至是持久化的场景中,性能及可用性是我们关注的重点,本文主要探索Redis部署的几种方式及交互原理。部署方式单节点 单节点(standalone)模式即在操作系统实例中单节点启动Redis进程如下图,暴露对应的服务端口号即可。缺点也比较明显,既无法保证高可用,也无法很好的支持横向扩展(只能增加宿主机配置)。原创 2020-06-07 23:06:16 · 647 阅读 · 0 评论 -
mysql select count性能及使用
前言 select count是我们在mysq经常使用的计算数据个数的sql,主要用法有三种,count(*),count(常量),count(列)。这三种在使用上及效率的区别呢?正文扫描的行数 首先对于效率来说,如下的一张表:CREATE TABLE `tb_user_info` (...原创 2019-10-24 21:09:41 · 2675 阅读 · 2 评论 -
sql注入原理及防范方式
前言 sql注入是一种危险系数较高的攻击方式,现在由于我们持久层框架越来越多,大部分框架会处理这个问题,因此导致我们对它的关注度越来越少了。最近部门在整理安全漏洞时,提到了一些关于sql注入的修改点,因此共同记录学习一下。正文原理 sql注入的原理是将sql代码伪装到输入参数中,传递...原创 2019-08-16 21:56:54 · 2572 阅读 · 0 评论 -
sql中使用md5
一、前言这两天对之前的项目做出一些总结,发现是有过对数据库中字段使用md5操作的sql,于是记录发出来。二、正文有时候在数据库表的设计中,我们对一条数据的标识有时候不只是id,还有可能是很多个字段组合在一起作为唯一标志。如对于一本书,book表有以下字段,name,year,author,version,price。其中name(书名),year(发表年份),author(作者),...原创 2019-05-26 18:12:45 · 10193 阅读 · 0 评论 -
关系型数据库中联合主键和唯一索引的应用
一、前言 在项目开发中往往会遇到两个实体对象之间存在多对多关系的情况,此时我们会维护两个实体对象表,一个关系表,用来存放两者之间的关系。比较典型的案例是学生表、课程表、学生课程关系表。在这种关系表中,我们可以确定的是,学生和课程关系虽然是多对多,但一个确定的学生id和一个确定的课程id在关系表中只能存在一个。如下图所示:,业务逻辑就是一个学生只能有当前课程的一个分数。t_stu...原创 2018-12-13 13:53:53 · 4285 阅读 · 0 评论 -
mysql主从分离库的配置
转载自https://www.cnblogs.com/sustudy/p/4174189.html前言 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一...转载 2018-09-26 17:34:20 · 1523 阅读 · 1 评论