mysql

后端架构师技术图谱

ε祈祈猫儿з 提交于 2021-02-13 15:28:50
后端架构师技术图谱 原文链接: github.com 最后更新于20180502 数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B-,B+,B*树 LSM 树 BitSet 常用算法 排序、查找算法 选择排序 冒泡排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 桶排序 基数排序 二分查找 Java 中的排序工具 布隆过滤器 字符串比较 KMP 算法 深度优先、广度优先 贪心算法 回溯算法 剪枝算法 动态规划 朴素贝叶斯 推荐算法 最小生成树算法 最短路径算法 并发 多线程 线程安全 一致性、事务 事务 ACID 特性 事务的隔离级别 MVCC 锁 Java中的锁和同步类 公平锁 & 非公平锁 悲观锁 乐观锁 & CAS ABA 问题 CopyOnWrite容器 RingBuffer 可重入锁 & 不可重入锁 互斥锁 & 共享锁 死锁 操作系统 计算机原理 CPU 多级缓存 进程 线程 协程 Linux 设计模式 设计模式的六大原则 23种常见设计模式 应用场景 单例模式 责任链模式 MVC IOC AOP UML 微服务思想 康威定律 运维 & 统计 & 技术支持 常规监控 APM 统计分析 持续集成(CI/CD) Jenkins 环境分离 自动化运维 Ansible puppet chef

详解mysql复制机制--异步复制,半同步复制和并行复制

时光总嘲笑我的痴心妄想 提交于 2021-02-13 14:55:26
图4 那么如何并行化,并行IO线程,还是并行SQL线程? 其实两方面都可以并行,但是并行SQL线程的收益更大,因为SQL线程做的事情更多(解析,执行)。并行IO线程,可以将从Master拉取和写Relay log分为两个线程;并行SQL线程则可以根据需要做到库级并行,表级并行,事务级并行。库级并行在mysql官方版本5.6已经实现。如下图,并行复制框架实际包含了一个协调线程和若干个工作线程,协调线程负责分发和解决冲突,工作线程只负责执行。 图中,DB1,DB2和DB3的事务就可以并发执行,提高了复制的性能。有时候库级并发可能不够,需要做表级并发,或更细粒度的事务级并发。 图 5 并行复制如何处理冲突? 并发的世界是美好的,但不能乱并发,否则数据就乱了。Master上面通过锁机制来保证并发的事务有序进行,那么并行复制呢?Slave必需保证回放的顺序与Master上事务执行顺序一致,因此只要做到顺序读取binlog,将不冲突的事务并发执行即可。对于库级并发而言,协调线程要保证执行同一个库的事务放在一个工作线程串行执行;对于表级并发而言,协调线程要保证同一个表的事务串行执行;对于事务级而言,则是保证操作同一行的事务串行执行。 是否粒度越细,性能越好? 这个并不是一定的。相对于串行复制而言,并行复制多了一个协调线程。协调线程一个重要作用是解决冲突,粒度越细的并发,可能会有更多的冲突

MySQL之汇总数据(AVG,COUNT,MAX,MIN,SUM)

半城伤御伤魂 提交于 2021-02-13 14:00:59
备注:sum和count的不同: count()函数里面的参数是列名的的时候,那么会 计算有值项 的次数。 //行数 Sum()函数里面的参数是列名的时候,是 计算列名的值的相加 ,而不是有值项的总数。 //行内数据的和 table test Field Type Null Key Default Extra id int(11) NO PRI NULL auto_increment name char(50) NO NULL age int(11) NO NULL school char(50) YES NULL (一)AVG()函数 AVG()通过对表中行数计数并计算特定列值之和,从而求得该列的平均值。 例如:SELECT AVG(age) AS avg_age FROM test; 此语句返回表test中所有age的平均值。 例如:SELECT AVG(age) AS avg_age FROM test WHERE name="john"; 此语句返回表test中name=john的age的平均值。 注:AVG只能确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg函数。而且avg函数会忽略列值为NULL的行。 (二)COUNT()函数 COUNT()函数进行计数。可利用COUNT()函数确定表中行的数目或者符合特定条件的行的数目。

Presto在大数据领域的实践和探索

半世苍凉 提交于 2021-02-13 13:57:42
小编在去年的时候,写过一篇轰动全网的文章 《你需要的不是实时数仓 | 你需要的是一款强大的OLAP数据库》 ,这篇文章当时被各大门户网站和自媒体疯狂转载,保守阅读量也在50万+UV,在这篇文章中提到过Preto,Presto作为OLAP计算领域的一员有着独特的优势和特点。 本篇文章是作者作为Presto小白时期,经过调研、线上调试、生产环境稳定运行这个过程中大量的实践经验和资料检索,沉淀下来的一个读书笔记。本文从原理入门、线上调优、典型应用等几个方面为读者全面剖析Presto,希望对大家有帮助。 我是谁?我从哪里来?要到哪里去? Presto is an open source distributed SQL query engine for running interactive analytic queries against data sources of all sizes ranging from gigabytes to petabytes. Presto allows querying data where it lives, including Hive, Cassandra, relational databases or even proprietary data stores. A single Presto query can combine data

MySQL之聚合数据(AVG,COUNT,MAX,MIN,SUM)

馋奶兔 提交于 2021-02-13 13:56:45
1.首先我们需要了解下什么是聚合函数    聚合函数aggregation function又称为组函数。 认情况下 聚合函数会对当前所在表当做一个组进行统计。 2. 聚合函数的特点   1.每个组函数接收一个参数(字段名或者表达式) 统计结果中默认忽略字段为NULL的记录   2.要想列值为NULL的行也参与组函数的计算,必须使用IFNULL函数对NULL值做转换。   3. 不允许出现嵌套 比如 sum(max(xx)) 3.聚合函数 count(),求数据表的行数 1 select count (*/字段名) from 数据表 4.聚合函数 max(),求某列的最大数值 1 select max (字段名) from 数据表    5.聚合函数min(),求某列的最小值 1 select main(字段名) from 数据表    6.聚合函数sum(),对数据表的某列进行求和操作 1 select sum (字段名) from 数据表    7.聚合函数avg(),对数据表的某列进行求平均值操作 1 select avg (字段名) from 数据表    8.聚合函数和分组一起使用 1 select count (*),group_concat(age) from students group by age;       总结:  

【Django】ORM操作#1

断了今生、忘了曾经 提交于 2021-02-13 12:01:22
"@[toc] <font color=black>补充:数据迁移与反迁移</font> <hr> # 迁移: python manage.py makemigrations # 纪录变成 python manage.py migrate # 迁移到数据库 # 反迁移: python manage.py inspectdb > models.py 执行后,会在执行的文件内写入模型类(文件可随意指定) 一、介绍 概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的基石. 简单的说,ORM时通过使用描述对象和数据库之间映射的 元数据 ,将程序中的对象自动持久华到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. 由来 让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational). 几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中. 按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中存在很多杂乱的SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的. 优势 ROM解决的主要问题是对象和关系的映射

了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表

余生长醉 提交于 2021-02-13 11:59:01
<div class="htmledit_views"> <p><span style="font-size:24px;">一、为什么要用小表驱动大表</span></p> <p><span style="font-size:14px;">1、驱动表的定义<br></span></p> <p><span style="font-size:24px;"></span></p> <p style="margin-top:0px;margin-bottom:0px;padding-top:0px;padding-bottom:0px;border:0px;"> <span style="font-size:14px;">当进行多表连接查询时, [驱动表] 的定义为:</span></p> <p style="margin-top:0px;margin-bottom:0px;padding-top:0px;padding-bottom:0px;border:0px;"> <span style="font-size:14px;">1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]</span></p> <p style="margin-top:0px;margin-bottom:0px;padding-top:0px;padding-bottom:0px;border:0px;

mysql驱动表与被驱动表及join优化

若如初见. 提交于 2021-02-13 11:35:52
驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表: 1.当使用 left join 时,左表是驱动表,右表是被驱动表 2.当使用 right join 时,右表时驱动表,左表是驱动表 3.当使用 join时 ,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表 join查询如何选择驱动表与被驱动表   在sql优化中,永远是以小表驱动大表 。 例如: A是小表,B是大表   使用left join 时,则应该这样写select * from A a left join B b on a.code=b.code   A表时驱动表,B表是被驱动表 测试 :A表140多条数据,B表20万左右的数据量   select * from A a left join B b on a.code=b.code   执行时间:7.5s   select * from B b left join A a on a.code=b.code   执行时间:19s 结论:小表驱动大表优于大表驱动小表 join查询在有索引条件下    驱动表有索引不会使用到索引   被驱动表建立索引会使用到索引 在以小表驱动大表的情况下,再给大表建立索引会大大提高执行速度 测试:给A表,B表建立索引 分析:EXPLAIN select * from A a left join B b on

Docker快速入门

喜欢而已 提交于 2021-02-13 09:25:59
我们以使用Docker的方式安装MySQL为例,快速体会Docker的基本操作 1、镜像操作 1、下载镜像 docker pull mysql #我们应该先去Docker Hub寻找我们感兴趣的镜像 docker pull image_name[:Tag] #1、tag一般为镜像的版本,不指定默认下载latest版本 #2、默认镜像是从Docker Hub下载,国内比较慢,推荐使用自己的阿里云加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 以上下载过程看出,镜像是分层的(Layer)。c499e6d256d6是当前层的唯一id(完整的id为256bit,64个十六进制字符组成)。 不同的镜像如果有相同的层,本地只会存储一份,减小了存储空间 严格说,下载镜像需要制定指定仓库名称,不过从Docker Hub下载的可以忽略前缀。如 - docker pull **docker.io/library/**mysql:5.7 2、列出镜像

最新 房多多java校招面经 (含整理过的面试题大全)

时光毁灭记忆、已成空白 提交于 2021-02-13 07:43:33
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火、京东、去哪儿、房多多等10家互联网公司的校招Offer,因为某些自身原因最终选择了房多多。6、7月主要是做系统复习、项目复盘、LeetCode与牛客刷题等准备工作,并且投了字节跳动、拼多多、猿辅导在内的几家公司的提前批,当然还是挂在了简历,因为毕竟自己的学校、学历、项目经验肯定比不过牛客网上那些大厂实习的大佬了,有时间也给自己做个总结,也希望能帮助到大家 (PS:再次编辑,感谢大家的支持,受宠若惊。私信问我要这些面试答案的,希望交流的朋友很多,但是很多不能及时看到,没办法一个个发给大家,大家注意下中间的百度网盘链接,整理成了pdf分享下给大家,也包括我之前面试准备的题跟视频,也可以进群交流,这样沟通成本少点) 校招心得 注重实力,保持良好心态 :面试过程中,继续巩固好自己的技术栈,然后保持一个良好的心态,尤其是还没有Offer的时候,心态别崩,其实到最后大家都会找到工作的,唯一的区别就是公司的方向、规模、待遇方面,也别太在意别人拿到了牛X的Offer,尤其是牛客网,天天神仙打架,刚开始自己也是很纳闷,怎么就能这么牛,最后也都见怪不怪了~。好多之前一直没Offer的人,可能突然某一天就收获到了几份Offer,所以不断提升自己的综合能力才是关键,与其在这羡慕别人,不如让自己心态沉静下来,认真复习、厚积薄发。 多交流,多思考