
获得徽章 1
#青训营笔记创作活动#
2月14日打卡day27
今日学习
分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。
分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。
2月14日打卡day27
今日学习
分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。
分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。
展开
评论
点赞
#青训营笔记创作活动#
2月14日打卡day27
今日学习
分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。
分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。
2月14日打卡day27
今日学习
分库分表是在海量数据下,由于单库、表数据量过大,导致数据库性能持续下降的问题,演变出的技术方案。
分库分表是由分库和分表这两个独立概念组成的,只不过通常分库与分表的操作会同时进行,以至于我们习惯性的将它们合在一起叫做分库分表。
展开
评论
点赞
#青训营笔记创作活动#
2月13日打卡day26
今日学习
为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而DB只承担数据落盘工作。
2月13日打卡day26
今日学习
为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而DB只承担数据落盘工作。
评论
点赞
#青训营笔记创作活动#
2月11日打卡day25
今日学习
缓存作为高并发系统中的神兵利器被广泛使用,堪称高并发系统的基石之一。而缓存的内容还远远不止我们本篇文档中所介绍的这些、它是一个非常宏大的命题。
2月11日打卡day25
今日学习
缓存作为高并发系统中的神兵利器被广泛使用,堪称高并发系统的基石之一。而缓存的内容还远远不止我们本篇文档中所介绍的这些、它是一个非常宏大的命题。
展开
评论
点赞
#青训营笔记创作活动#
2月9日打卡day24
今日学习
通常情况下,用户在请求之前,需要先输入验证码。用户发起请求之后,服务端会去校验该验证码是否正确。只有正确才允许进行下一步操作,否则直接返回,并且提示验证码错误。此外,验证码一般是一次性的,同一个验证码只允许使用一次,不允许重复使用。普通验证码,由于生成的数字或者图案比较简单,可能会被破解。优点是生成速度比较快,缺点是有安全隐患。还有一个验证码叫做:移动滑块,它生成速度比较慢,但比较安全,是目前各大互联网公司的首选。
2月9日打卡day24
今日学习
通常情况下,用户在请求之前,需要先输入验证码。用户发起请求之后,服务端会去校验该验证码是否正确。只有正确才允许进行下一步操作,否则直接返回,并且提示验证码错误。此外,验证码一般是一次性的,同一个验证码只允许使用一次,不允许重复使用。普通验证码,由于生成的数字或者图案比较简单,可能会被破解。优点是生成速度比较快,缺点是有安全隐患。还有一个验证码叫做:移动滑块,它生成速度比较慢,但比较安全,是目前各大互联网公司的首选。
展开
评论
点赞
#青训营笔记创作活动#
2月7日打卡day23
今日学习
大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥), q(私钥), N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。
2月7日打卡day23
今日学习
大数取模运算是不可逆的,因此他人无法暴力解密。但是结合欧拉定理,我们可以选取出合适的p(公钥), q(私钥), N(用于取模的大数),让原本不可逆的运算在特定情况下,变得有那么点“可逆”的味道。数学原理决定了我们用公钥加密的数据,只有私钥能解密。反过来,用私钥加密的数据,也只有公钥能解密。
展开
评论
点赞
#青训营笔记创作活动#
2月5日打卡day22
今日学习
优点:
完全基于内存操作,性能极高,读写速度快,Redis 能够支持超过 100KB/s 的读写速率
支持高并发,支持10万级别的并发读写
支持主从模式,支持读写分离与分布式
具有丰富的数据类型与丰富的特性(发布订阅模式)
支持持久化操作,不会丢失数据
缺点:
数据库容量受到物理内存的限制,不能实现海量数据的高性能读写
相比关系型数据库,不支持复杂逻辑查询,且存储结构相对简单
虽然提供持久化能力,但实际更多是一个 disk-backed 功能,与传统意义上的持久化有所区别
2月5日打卡day22
今日学习
优点:
完全基于内存操作,性能极高,读写速度快,Redis 能够支持超过 100KB/s 的读写速率
支持高并发,支持10万级别的并发读写
支持主从模式,支持读写分离与分布式
具有丰富的数据类型与丰富的特性(发布订阅模式)
支持持久化操作,不会丢失数据
缺点:
数据库容量受到物理内存的限制,不能实现海量数据的高性能读写
相比关系型数据库,不支持复杂逻辑查询,且存储结构相对简单
虽然提供持久化能力,但实际更多是一个 disk-backed 功能,与传统意义上的持久化有所区别
展开
评论
点赞
#青训营笔记创作活动#
2月4日打卡day21
今日学习
①Table:当前索引属于那张表。
②Non_unique:目前索引是否属于唯一索引,0代表是的,1代表不是。
③Key_name:当前索引的名字。
④Seq_in_index:如果当前是联合索引,目前字段在联合索引中排第几个。
⑤Column_name:当前索引是位于哪个字段上建立的。
⑥Collation:字段值以什么方式存储在索引中,A表示有序存储,NULL表无序。
⑦Cardinality:当前索引的散列程度,也就是索引中存储了多少个不同的值。
⑧Sub_part:当前索引使用了字段值的多少个字符建立,NULL表示全部。
⑨Packed:表示索引在存储字段值时,以什么方式压缩,NULL表示未压缩,
⑩Null:当前作为索引字段的值中,是否存在NULL值,YES表示存在。
⑪Index_type:当前索引的结构(BTREE, FULLTEXT, HASH, RTREE)。
⑫Comment:创建索引时,是否对索引有备注信息。
2月4日打卡day21
今日学习
①Table:当前索引属于那张表。
②Non_unique:目前索引是否属于唯一索引,0代表是的,1代表不是。
③Key_name:当前索引的名字。
④Seq_in_index:如果当前是联合索引,目前字段在联合索引中排第几个。
⑤Column_name:当前索引是位于哪个字段上建立的。
⑥Collation:字段值以什么方式存储在索引中,A表示有序存储,NULL表无序。
⑦Cardinality:当前索引的散列程度,也就是索引中存储了多少个不同的值。
⑧Sub_part:当前索引使用了字段值的多少个字符建立,NULL表示全部。
⑨Packed:表示索引在存储字段值时,以什么方式压缩,NULL表示未压缩,
⑩Null:当前作为索引字段的值中,是否存在NULL值,YES表示存在。
⑪Index_type:当前索引的结构(BTREE, FULLTEXT, HASH, RTREE)。
⑫Comment:创建索引时,是否对索引有备注信息。
展开
评论
点赞
#青训营笔记创作活动#
2月3日打卡day20
今日学习
①整个数据库中,数据表的查询速度直线提升,数据量越大时效果越明显。
②通过创建唯一索引,可以确保数据表中的数据唯一性,无需额外建立唯一约束。
③在使用分组和排序时,同样可以显著减少SQL查询的分组和排序的时间。
④连表查询时,基于主外键字段上建立索引,可以带来十分明显的性能提升。
⑤索引默认是B+Tree有序结构,基于索引字段做范围查询时,效率会明显提高。
⑥从MySQL整体架构而言,减少了查询SQL的执行时间,提高了数据库整体吞吐量。
2月3日打卡day20
今日学习
①整个数据库中,数据表的查询速度直线提升,数据量越大时效果越明显。
②通过创建唯一索引,可以确保数据表中的数据唯一性,无需额外建立唯一约束。
③在使用分组和排序时,同样可以显著减少SQL查询的分组和排序的时间。
④连表查询时,基于主外键字段上建立索引,可以带来十分明显的性能提升。
⑤索引默认是B+Tree有序结构,基于索引字段做范围查询时,效率会明显提高。
⑥从MySQL整体架构而言,减少了查询SQL的执行时间,提高了数据库整体吞吐量。
展开
评论
点赞
#青训营笔记创作活动#
2月2日打卡day19
今日学习
SQL审核:具有一站式SQL审核面板,可以直观地看到数据库所有变更记录。
SQL建议:能自动检查SQL语句规范,额外提供GitHub Action和API接入方式。
SQL编辑器:可以在线管理及查看数据库表,支持语法的自动提示。
GitOps工作流:支持集成GitHub和GitLab,使用GitOps工作流进行数据库变更。
备份恢复:支持自动备份数据库及恢复数据。
2月2日打卡day19
今日学习
SQL审核:具有一站式SQL审核面板,可以直观地看到数据库所有变更记录。
SQL建议:能自动检查SQL语句规范,额外提供GitHub Action和API接入方式。
SQL编辑器:可以在线管理及查看数据库表,支持语法的自动提示。
GitOps工作流:支持集成GitHub和GitLab,使用GitOps工作流进行数据库变更。
备份恢复:支持自动备份数据库及恢复数据。
展开
评论
点赞
#青训营笔记创作活动#
2月1日打卡day18
今日学习
explain只是看到SQL的预估执行计划,如果要了解SQL真正的执行线程状态及消耗的时间,需要使用profiling。开启profiling参数后,后续执行的SQL语句都会记录其资源开销,包括IO,上下文切换,CPU,内存等等,我们可以根据这些开销进一步分析当前慢SQL的瓶颈再进一步进行优化。
2月1日打卡day18
今日学习
explain只是看到SQL的预估执行计划,如果要了解SQL真正的执行线程状态及消耗的时间,需要使用profiling。开启profiling参数后,后续执行的SQL语句都会记录其资源开销,包括IO,上下文切换,CPU,内存等等,我们可以根据这些开销进一步分析当前慢SQL的瓶颈再进一步进行优化。
展开
评论
点赞
#青训营笔记创作活动#
1月31日打卡day17
今日学习
explain只是看到SQL的预估执行计划,如果要了解SQL真正的执行线程状态及消耗的时间,需要使用profiling。开启profiling参数后,后续执行的SQL语句都会记录其资源开销,包括IO,上下文切换,CPU,内存等等,我们可以根据这些开销进一步分析当前慢SQL的瓶颈再进一步进行优化。
1月31日打卡day17
今日学习
explain只是看到SQL的预估执行计划,如果要了解SQL真正的执行线程状态及消耗的时间,需要使用profiling。开启profiling参数后,后续执行的SQL语句都会记录其资源开销,包括IO,上下文切换,CPU,内存等等,我们可以根据这些开销进一步分析当前慢SQL的瓶颈再进一步进行优化。
展开
评论
点赞
#青训营笔记创作活动#
1月31日打卡day17
今日学习
MySQL的连接池主要是为了实现复用线程的目的,因为每个数据库连接在MySQL中都会使用一条线程维护,而每次为客户端分配连接对象时,都需要经历创建线程、分配栈空间....这些繁重的工作,这个过程需要时间,同时资源开销也不小,所以MySQL利用池化技术解决了这些问题。
1月31日打卡day17
今日学习
MySQL的连接池主要是为了实现复用线程的目的,因为每个数据库连接在MySQL中都会使用一条线程维护,而每次为客户端分配连接对象时,都需要经历创建线程、分配栈空间....这些繁重的工作,这个过程需要时间,同时资源开销也不小,所以MySQL利用池化技术解决了这些问题。
展开
评论
点赞
#青训营笔记创作活动#
1月30日打卡day16
今日学习
HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。
1月30日打卡day16
今日学习
HTTP状态码用来表示响应结果的状态,其中200是正常响应,4xx是客户端错误,5xx是服务端错误。
客户端和服务端之间加入nginx,可以起到反向代理和负载均衡的作用,客户端只管向nginx请求数据,并不关心这个请求具体由哪个服务器来处理。
后端服务端应用如果发生崩溃,nginx在访问服务端时会收到服务端返回的RST报文,然后给客户端返回502报错。502并不是服务端应用发出的,而是nginx发出的。因此发生502时,后端服务端很可能没有没有相关的502日志,需要在nginx侧才能看到这条502日志。
如果发现502,优先通过监控排查服务端应用是否发生过崩溃重启,如果是的话,再看下是否留下过崩溃堆栈日志,如果没有日志,看下是否可能是oom或者是其他原因导致进程主动退出。如果进程也没崩溃过,去排查下nginx的日志,看下是否将请求打到了某个不知名IP端口上。
展开
评论
点赞
#青训营笔记创作活动#
1月29日打卡day15
今日学习
尽量不要使用e.printStackTrace(),而是使用log打印。因为e.printStackTrace()语句可能会导致内存占满。
catch住异常时,建议打印出具体的exception,利于更好定位问题
不要用一个Exception捕捉所有可能的异常
记得使用finally关闭流资源或者直接使用try-with-resource。
捕获异常与抛出异常必须是完全匹配,或者捕获异常是抛异常的父类
捕获到的异常,不能忽略它,至少打点日志吧
注意异常对你的代码层次结构的侵染
自定义封装异常,不要丢弃原始异常的信息Throwable cause
运行时异常RuntimeException ,不应该通过catch的方式来处理,而是先预检查,比如:NullPointerException处理
注意异常匹配的顺序,优先捕获具体的异常
1月29日打卡day15
今日学习
尽量不要使用e.printStackTrace(),而是使用log打印。因为e.printStackTrace()语句可能会导致内存占满。
catch住异常时,建议打印出具体的exception,利于更好定位问题
不要用一个Exception捕捉所有可能的异常
记得使用finally关闭流资源或者直接使用try-with-resource。
捕获异常与抛出异常必须是完全匹配,或者捕获异常是抛异常的父类
捕获到的异常,不能忽略它,至少打点日志吧
注意异常对你的代码层次结构的侵染
自定义封装异常,不要丢弃原始异常的信息Throwable cause
运行时异常RuntimeException ,不应该通过catch的方式来处理,而是先预检查,比如:NullPointerException处理
注意异常匹配的顺序,优先捕获具体的异常
展开
评论
点赞
#青训营笔记创作活动#
1月28日打卡day14
今日学习
路由器是三层设备(对应OSI网络模型在网络层),所以路由器所连接的范围更广,网络和网络之间的连接就是通过路由器;计算机所发出的网络数据,都是先经过集线器和交换机进行区域的汇总,然后才转发给路由器;这样一步步连接到互联网的。
所以路由器跟交换机不同的是,在路由器里维护的是路由表,在路由表中最重要的是目的网络地址(也就是IP)和下一跳地址。所以路由通过根据目的网络地址来确定下一跳路由器。最终找到目的主机所在目的网络上的路由器,只到最后一个路由器时,才试图向目的主机进行直接交付。
1月28日打卡day14
今日学习
路由器是三层设备(对应OSI网络模型在网络层),所以路由器所连接的范围更广,网络和网络之间的连接就是通过路由器;计算机所发出的网络数据,都是先经过集线器和交换机进行区域的汇总,然后才转发给路由器;这样一步步连接到互联网的。
所以路由器跟交换机不同的是,在路由器里维护的是路由表,在路由表中最重要的是目的网络地址(也就是IP)和下一跳地址。所以路由通过根据目的网络地址来确定下一跳路由器。最终找到目的主机所在目的网络上的路由器,只到最后一个路由器时,才试图向目的主机进行直接交付。
展开
评论
点赞
#青训营笔记创作活动#
1月27日打卡day13
今日学习
Connection Pool翻译过来的意思就是连接池,那为什么需要有这个东西呢?因为前面聊到过,所有的客户端连接都需要一条线程去维护,而线程资源无论在哪里都属于宝贵资源,因此不可能无限量创建,所以这里的连接池就相当于Tomcat中的线程池,主要是为了复用线程、管理线程以及限制最大连接数的。
1月27日打卡day13
今日学习
Connection Pool翻译过来的意思就是连接池,那为什么需要有这个东西呢?因为前面聊到过,所有的客户端连接都需要一条线程去维护,而线程资源无论在哪里都属于宝贵资源,因此不可能无限量创建,所以这里的连接池就相当于Tomcat中的线程池,主要是为了复用线程、管理线程以及限制最大连接数的。
展开
评论
点赞