0

MySQL数据库,表结构设计的五个维度

一、数据场景1、表结构简介任何工具类的东西都是为了解决某个场景下的问题,比如Redis缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据。数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统。表结构的设计通常从下面几个方面考虑:业务场景、设计规范、表结构、字段属性、数据管理。2、用户场景例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表、单点登录表、状态管理表、支付账户表等。用户信息表存储用户三要素相关信息:姓名,手机号,身份证,登录密码,邮箱等。CREATE TABLE `ms_user_center` ...

阅读全文>>

0

菜鸟积分系统稳定性建设 - 分库分表&百亿级数据迁移

一 前言拆库&数据迁移说白了,考验的不是一个人的技术功底,而是一个人干活的细致程度,以及抗压能力。无论在哪个公司,数据库迁移的机会都不会太多,因此,我也是非常珍惜这次历练,用阿里的一句老话来说就是 “因人成事,借事修人”。写这篇文章的目的主要是自己进行一个总结,也希望能给需要的同学们一些参考。二 背景在星爷的《大话西游》中有一句非常出名的台词:“曾经有一份真挚的感情摆在我的面前我没有珍惜,等我失去的时候才追悔莫及,人间最痛苦的事莫过于此,如果上天能给我一次再来一次的机会,我会对哪个女孩说三个字:我爱你,如果非要在这份爱上加一个期限,我希望是一万年!”在我们开发人员的眼中,这个感情就和我...

阅读全文>>

0

我是如何设计短域名服务的,欢迎大家吐槽

今天刚收到一个短信,里面就有一个短域名。这个短域名的目的很简单,为了在发短信的时候能省点钱,并且让用户体验不要那么糟糕,动不动发一个几百个字符的URL,小白用户一脸懵逼。其实短域名的原理非常简单,当你访问这个段域名的时候,短域名服务器会给你重定向到到真实的URL,浏览器会自动跳转到这个真实的URL。那么如何设计这样一个短域名服务呢?下面谈谈我个人的设想。第一个需要解决的问题,是如何生成这样一个短域名随机串。我们可以通过随机函数从 [a-z 0–9 A-Z] 这 62 字符(尽管中划线和下划线也是合法字符)里面随意的组合,那么它有多少种可能呢?如果是 7 未随机串 62⁷ = 3,521,614...

阅读全文>>

0

MySQL数据库大森林:B树、B+树、二叉树、红黑树

1、二叉树:每个节点最多只有两个子树的树结构2、B树和B+树2.1、区别1)B+树只有叶子节点会存储指针,B树所有节点都带2)B+树叶子节点存储了所有数据,B树在内部节点出现的数据不会出现在叶子节点3)B+树所有叶子节点都是通过指针连在一起,B树不是2.2、B+树优点1)内部节点不存储指针,使得一个内部节点中可以容纳更多的数据2)叶子节点通过指针连在一起范围扫描很方便,B树就要在叶子节点和内部节点之间不停往返2.3、B树优点对于内部节点,可以直接得到指针2.4、为什么数据库索引用B+树1)因为叶子节点上存储了所有的数据和索引而且相互之间用指针连在一起,对于范围查找不用跨层就能把数据查出来2)因...

阅读全文>>

0

高并发,你真的理解透彻了吗?

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多。大概分成这样几类:1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键数据。2、设计了一些方案,但是细节掌握不透彻:讲不出该方案要关注的技术点和可能带来的副作用。...

阅读全文>>

0

基于 Mysql 实现一个简易版搜索引擎

前言前段时间,因为项目需求,需要根据关键词搜索聊天记录,这不就是一个搜索引擎的功能吗? 于是我第一时间想到的就是 ElasticSearch 分布式搜索引擎,但是由于一些原因,公司的服务器资源比较紧张,没有额外的机器去部署一套 ElasticSearch 服务,而且上线时间也比较紧张,数据量也不大,然后就想到了 Mysql 的全文索引。简介其实 Mysql 很早就支持全文索引了,只不过一直只支持英文的检索,从5.7.6 版本开始,Mysql 就内置了 ngram 全文解析器,用来支持中文、日文、韩文分词。Mysql 全文索引采用的是倒排索引的原理,在倒排索引中关键词是主键,每个关键词都对应着一...

阅读全文>>

0

MySQL 时间类型 datetime、bigint、timestamp选哪个?很多人答错了

数据库中可以用datetime、bigint、timestamp来表示时间,那么选择什么类型来存储时间比较合适呢?前期数据准备通过程序往数据库插入50w数据数据表:CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_date` datetime NOT NULL, `time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `time_long` bigint(20) NOT ...

阅读全文>>

0

面试官:你说说一条更新SQL的执行过程?

在上一篇《面试官:你说说一条查询SQL的执行过程?》中描述了Mysql的架构分层,通过解析器、优化器和执行引擎完成一条SQL查询的过程,那这一篇续上继续说明一条更新SQL的执行过程。对于一个SQL语句的更新来说,前面的流程都可以说类似的,通过解析器进行语法分析,优化器优化,执行引擎去执行,这个都没有什么问题,重点在于多了一点东西,那就是redo_log、undo_log和binlog。执行流程大致如下:首先客户端发送请求到服务端,建立连接。服务端先看下查询缓存,对于更新某张表的SQL,该表的所有查询缓存都失效。接着来到解析器,进行语法分析,一些系统关键字校验,校验语法是否合规。然后优化器进行S...

阅读全文>>

0

Ubuntu搭建Mysql+Keepalived高可用(双主热备)

Mysql5.5双机热备实现方案安装两台Mysql安装Mysql5.5sudo apt-get update apt-get install aptitude aptitude install mysql-server-5.5 或 sudo apt-cache search mariadb-server apt-get install -y mariadb-server-5.5卸载sudo apt-get remove mysql-* dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P配置权限vim /etc/mysql/my.cnf...

阅读全文>>

1

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

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

阅读全文>>