国庆期间复习了下Mysql和redis,ES

国庆期间复习了下Mysql和redis,ES包括:

Mysql索引面试题目分析索引分析

3)用到了索引123,4失效

 

 

 

【优化总结口诀】
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难! 

Mysql的日志

Mysql慢查询

Mysql表锁:共享读锁,独占写锁

      

结论:读锁会阻塞写,但是不会堵塞读。而写锁则会把读和写都堵塞。

表锁-读锁:

加读锁 lock table user read;

解锁 lock tables;

session1session2
修改session1锁住的表失败阻塞
读session1锁住的表成功成功
修改session1没锁的表失败成功
读session1没锁的表失败成功
表锁-写锁:

加写锁 lock table user write;

解锁 lock tables;

session1session2
修改session1锁住的表成功阻塞
读session1锁住的表成功阻塞
修改session1没锁的表失败成功
读session1没锁的表失败成功

 查看哪些表被锁住了:

Mysql行级锁

 如何锁定一行:

Mysql主从复制:

都是一些配置的问题

基本原理:

复制的基本原则:

每个slave只有一个master
每个slave只能有一个唯一的服务器ID
每个master可以有多个salve

Mysql的Explain的用法

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈
      

Mysql的执行流程

Mysql的三大范式:

        1NF 原子性:表中每列不可再拆分。 
        2NF 不产生局部依赖,一张表只描述一件事情 // 第二范式就是在第一范式的基础上所有列完全依赖于主键列。
        3NF 不产生传递依赖,表中每一列都直接依赖于主键。而不是通过其它列间接依赖于主键。//简而言之,第三范式就是所有列不依赖于其它非主键列,也就是在满足2NF的基础上,任何非主列不得传递依赖于主键。所谓传递依赖,指的是如果存在"A → B → C"的决定关系,则C传递依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:主键列 → 非主键列x → 非主键列y // 存在传递的决定关系: 学号->所在学院 -> 学院地点 

redis的用途,以及与mysql的对比

在分布式数据库中CAP原理CAP+BASE:

C:Consistency(强一致性)

A:Availability(可用性)

P:Partion tolerance(分区容错性)

CAP的理论就是说在分布式存储系统中,最多只能实现上面的两点。

而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须要实现的。

所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这一点。

C:强一致性 A:高可用性 P:分布式容错性

CA 传统Oracle数据库

AP大多数网站架构的选择

CP Redis、Mongodb

 悲观锁:

顾名思义,每次去拿数据的时候都被认为别人会修改,所以每次在拿数据的时候都会被锁上,这样别人想拿这个数据就会block直到它拿到锁,传统的关系型数据库里边就用到了很多这种锁机制,比如行锁、表锁等,读锁、写锁等,都是在做操作之前先锁上。

乐观锁:

每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多度的应用类型,这样可以提高吞吐量。

乐观锁策略:提交版本必须大于记录当前版本才能执行更新。

 CAS:

redis事务

DISCARD:取消事务,放弃执行事务块内的所有命令。

EXEC:执行所有事务块的命令。

MULTI:标记一个事务块的开始。

UNWATCH:取消WATCH命令对多有key的监视。

WATCH key [key......]:监视一个(或多个)key,如果在事务执行之前这个key被其他命令所改动,那么事务将打断。

Case1:正常放行

Case2:放弃事务

Case3:全体连坐

Case4:冤头债主

Case5:watch监控

es/elasticsearch的副本和分片的区别

一:概念
(1)集群(Cluster): ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

(2)节点(Node): 形成集群的每个服务器称为节点。

         索引(index): 在 ES 中, 索引是一组文档的集合

(3)分片(shard)
       当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

(4)副本(Replia)
       为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

二:区别
分片与副本的区别在于:

当你分片设置为5,数据量为30G时,es会自动帮我们把数据均衡地分配到5个分片上,即每个分片大概有6G数据,当你查询数据时,ES会把查询发送给每个相关的分片,并将结果组合在一起。

而副本,就是对分布在5个分片的数据进行复制。因为分片是把数据进行分割而已,数据依然只有一份,这样的目的是保障查询的高效性,副本则是多复制几份分片的数据,这样的目的是保障数据的高可靠性,防止数据丢失。

注意
索引建立后,分片个数是不可以更改的

倒排索引表:

1、将要搜索的文档内容分词,所有不重复的词组成分词列表。

2、将搜索的文档最终以Document方式存储起来。

3、每个词和docment都有关联。

现在,如果我们想搜索 quick brown ,我们只需要查找包含每个词条的文档:

两个文档都匹配,但是第一个文档比第二个匹配度更高。如果我们使用仅计算匹配词条数量的简单 相似性算法 ,那么,我们可以说,对于我们查询的相关性来讲,第一个文档比第二个文档更佳。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值