这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看”
1. MySQL查询慢是什么体验?
1.1 索引
1.1.1 什么原因导致索引失效
where 中使用 != 或 <> 或 or 或表达式或函数(左侧)
like 语句 % 开头
字符串未加’’
索引字段区分度过低,如性别
未匹配最左前缀
1.1.2 这些原因为什么导致索引失效
函数操作
where length(a) = 6
查询,这时传递一个 6 到 A 的索引树,不难想象在树的第一层就迷路了。隐式转换
隐式类型转换对于 JOOQ 这种框架来说一般倒不会出现。
隐式字符编码转换在连表查询时倒可能出现,即连表字段的类型相同但字符编码不同。
破坏了有序性
1.1.3 性别字段为什么不要加索引
为什么索引区分度低的字段不要加索引。盲猜效率低,效率的确低,有时甚至会等于没加。
1.1.4 有什么好用且简单的索引方法
索引下推:性别字段不适合建索引,但确实存在查询场景怎么办?如果是多条件查询,可以建立联合索引利用该特性优化。
覆盖索引:也是联合索引,查询需要的信息在索引里已经包含了,就不会再回表了。
前缀索引:对于字符串,可以只在前 N 位添加索引,避免不必要的开支。假如的确需要如关键字查询,那交给更合适的如 ES 或许更好。
不要对索引字段做函数操作
对于确定的、写多读少的表或者频繁更新的字段都应该考虑索引的维护成本。
1.1.5 如何评价 MySQL 选错了索引
信息统计不准确:可以使用
analyze table x
重新分析。优化器误判:可以
force index
强制指定。或修改语句引导优化器,增加或删除索引绕过。
1.2 等MDL锁
show processlist
命令查看处于Waiting for table metadata lock
状态的语句。1.3 等 flush
show processlist
命令查看时会发现处于Waiting for table flush
状态。1.4 等行锁
1.5 当前读
1.6 大表场景
1.6.1 分库分表
方案
如果磁盘或网络有 IO 瓶颈,那就要分库和垂直分表。
如果是 CPU 瓶颈,即查询效率偏低,水平分表。
水平即切分数据,分散原有数据到更多的库表中。 垂直即按照业务对库,按字段对表切分。
问题
唯一 ID 方法很多,DB 自增、Snowflake、号段、一大波GUID算法等。
非 partition key 查询常用映射法解决,映射表用到覆盖索引的话还是很快的。或者可以和其他 DB 组合。
扩容要根据分片时的策略确定,范围分片的话就很简单,而随机取模分片就要迁移数据了。也可以用范围 + 取模的模式分片,先取模再范围,可以避免一定程度的数据迁移。
1.6.2 读写分离
为什么要读写分离
问题
过期读,也就是主从延时问题,这个对于。
分配机制,是走主还是从库。可以直接代码中根据语句类型切换或者使用中间件。
1.7 小结
2. 如何评价 ElasticSearch
2.1 可以干什么
GET yourIndex/_search
{
"from" : 0, "size" : 10,
"query" : {
"match_phrase" : {
"log" : "xxx"
}
}
}
2.2 ES 的结构
GET /_cat/health?v&pretty:查看集群健康状态 GET /_cat/shards?v :查看分片状态 GET yourindex/_mapping :index mapping结构 GET yourindex/_settings :index setting结构 GET /_cat/indices?v :查看当前节点所有索引信息
"******": {
"mappings": {
"doc": {
"properties": {
"appname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
2.3 ES 查询为什么快?
2.3.1 分词后检索
2.3.2 精确检索
2.4 什么时候用 ES
2.4.1 全文检索
分词
POST yourindex/_analyze
{
"field":"yourfield",
"text":"我可真是个机灵鬼"
}
2.4.2 组合查询
1. ES + MySQL
2. ES + HBASE
2.5 小结
3. HBASE
3.1 存储结构
3.2 OLTP 和 OLAP
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理。
OLAP是数据仓库系统的主要应用,支持复杂分析,侧重决策支持,提供直观易懂的查询结果。
3.3 RowKey
3.4 使用场景
4. 总结
参考
亿级流量系统架构之如何设计每秒十万查询的高并发架构 https://juejin.im/post/5bfe771251882509a7681b3a
使用 ELK 搭建日志集中分析平台 https://wsgzao.github.io/post/elk/)https://wsgzao.github.io/post/elk/
MySQL和Lucene索引对比分析https://www.cnblogs.com/luxiaoxun/p/5452502.html
HBASE 深入浅出 https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html
最近有不少老铁在后台留言说,想进大厂,但是算法不好。最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂。现在开放分享给大家。希望对大家有所帮助。 任何的算法题,如同写作文一样,都有一些模板可以套用的。比如面试常考的DP(动态规划),难的是一些关键点是否能想清楚。比如你能写出动态转移方程,这题基本上就可以AC了。 整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。 他对知识点的讲解非常详细,比如这里的贪心算法,排版非常精美: 目前上述内容已打包成完整电子书,具体获取方式如下:
点击下面公众号卡片,关注「编程技术精选」公众号;
在「编程技术精选」公众号后台回复关键词「115」获取下载地址。