Skip to content

Commit 854ddf3

Browse files
committed
update
1 parent b915a1f commit 854ddf3

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

MD/数据库-MySQL.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,19 @@
99
因为MyISAM相对简单所以在效率上要优于InnoDB。如果系统读多,写少,对原子性要求低。那么MyISAM最好的选择。
1010
如果系统读少,写多的时候,尤其是并发写入高的时候,还需要事务安全性。InnoDB就是首选了。
1111

12-
### SQL性能优化
13-
* 对经常查询的列建立索引,为了避免全表扫描,建多了当数据改变时修改索引浪费资源
12+
### [数据库性能优化](https://www.zhihu.com/question/19719997)
13+
1. 优化SQL语句和索引
14+
2. 加缓存,Memcached, Redis
15+
3. 主从复制,读写分离
16+
4. 垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统
17+
5. 水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;
18+
19+
对于第1点:
20+
21+
* 对经常查询的列建立索引,但索引建多了当数据改变时修改索引会增大开销
1422
* 使用精确列名查询而不是*
15-
* 减少嵌套查询
16-
* 不用NOT IN,IS NULL,NOT IS NULL,无法使用索引
23+
* 减少[嵌套查询](http://www.cnblogs.com/zhengyun_ustc/p/slowquery3.html),使用Join替代
24+
* 不用NOT IN,因为会使用全表扫描而不是索引;不用IS NULLNOT IS NULL,因为会使索引、索引统计和值更加复杂,并且需要额外一个字节的存储空间。
1725

1826
问:有个表特别大,字段是姓名、年龄、班级,如果调用`select * from table where name = xxx and age = xxx`该如何通过建立索引的方式优化查询速度?
1927
答:由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age, class)的复合索引,那么其实相当于创建了(name, age, class)、(name, age)、(name)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

MD/高性能.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22
### 原理
33
单线程的IO复用模型。便于IO操作,不便于排序、聚合。
44

5+
### 数据类型
6+
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
7+
58
### 持久化
69
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
710
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
811
Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
912

10-
### 消息队列
11-
Redis自带的PUB/SUB机制,即发布-订阅模式。这种模式生产者(producer)和消费者(consumer)是1-M的关系,即一条消息会被多个消费者消费,当只有一个消费者时即可以看做一个1-1的消息队列
12-
13-
或者PUSH/POP机制
14-
15-
但都没有可靠的重试机制,需要自己管理与备份
16-
1713
### 缓存击穿
1814
查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大地压力。
1915

@@ -33,7 +29,7 @@ Redis自带的PUB/SUB机制,即发布-订阅模式。这种模式生产者(pro
3329
[https://www.ibm.com/developerworks/cn/java/j-lo-jvm-optimize-experience/index.html](https://www.ibm.com/developerworks/cn/java/j-lo-jvm-optimize-experience/index.html)
3430

3531
## 高并发怎么处理
36-
问题:比较耗CPU的任务摆在这里,程序也无法提升性能了,该怎么办?
32+
:比较耗CPU的任务摆在这里,程序也无法提升性能了,该怎么办?
3733

3834
1. 先判断能否使用缓存,还是重新耗费CPU资源来创建一个
3935
2. 用偏重CPU性能的机器来做这个功能的专项负载均衡

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ PS:除开知识点,一定要准备好1分钟~3分钟的个人介绍,以及
1919
### [高性能](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/高性能.md)
2020
### 分布式(正在完善)
2121
* [缓存](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/分布式-缓存.md)
22+
* [](https://blog.csdn.net/xlgen157387/article/details/79036337)
2223
### [搜索引擎](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/搜索引擎.md)
2324
搜索引擎是因为个人项目关系,那个搜索引擎非常简单,但有很多东西可以问到,可选择性学习借鉴,了解到对项目是如何提问的,还有问题的深度
2425
### [在线编程](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/在线编程.md)

0 commit comments

Comments
 (0)