系统架构知识梳理

1.访问数据库查询数据2种方式。 全表扫描和索引。

1)尽量使用索引,避免全表扫描。  应对where,orderby建立索引;where null ,《》!=,like,between in,in not in 不要使用最好

2)未必使用索引都比全表扫描快。  比如:当数据量很小的情况,全表扫描的速度可能会比使用索引快。

3)索引    优点:加快数据查询    缺点:写入数据库容易造成页碎片,插入,删除数据会重新生成索引,还得移动附近的数据,容易造成部分存储空着用不到

     索引的结构是 B树(左右节点数目近乎相同),即二叉树;

     有根节点,非页节点(引导根节点到页节点上),页节点(包含索引数据的页)

2.视图的好处

假如需要查询下面的数据,sql语句如下

select  A.id,B.no,B.no2   from  A,B  where A.id=B.id        首先,编码人员需要知道数据库表的关联以及相关字段id。

如果我们有个view 视图 如下。

create view v_example as

select A.id,B.no,B.no2 from A,B where A.id=B.id

那么我们查询的语句应为: select * from  v_example   (告诉数据库把查询v_example视图的获得的数据直接给我)

好处:1)不需要熟悉表关联关系,可以直接获取数据   2)对闲杂人员,隐藏表真实内部结构,增强安全性。

3.传统web架构,大体上简单架构

web负载均衡,服务器集群,主从数据库(读写分离),缓存技术,队列,分布式存储。

1)web负载均衡cdn

分担节点的压力,分担到其他节点上面去。尤其大并发量,可以将并发了分担到不同节点上。

?web服务器如何确保 各台程序都相同

2)服务器集群

将一个复杂计算分配到几个节点上面去,然后汇总各个节点的结果。

3)主从数据库(读写分离)   Master和Stave数据库,解决写数据库造成数据库卡。

数据库作用就是被读写;当写数据的时候会对数据进行行锁,页锁,段锁,会影响其他数据的查询。

经过调查 读:写 10:1。 

那么分主数据库和从数据库。

主数据库用于增删查数据写入和最新数据的读取(从数据库是通过订阅主数据库数据进行数据库同步的,会有不等的延时,可以设置时间,延时几分钟,几小时等)。

从数据库用于 读改动很小的数据,比如:60天之前的订单信息(几乎不会变动)。

例:可以将订单号格式设置为 年月日小时分钟秒随机数.  20110523180012sdfdfjk

     根据订单号,确定是否为60天之前的订单,如果是 设置 connectring=从数据库的信息,如果不是 connectring=主数据库的信息。

例:豆瓣读书:  图书信息,标签信息,评论信息,喜欢这本书的读者列表

  图书信息需要最新的,所以可以从主数据库读取

标签信息不需要很新不需要及时,从从数据库读取

评论信息需要即使,主数据库读取

喜欢这本书的读者列表,从从数据库读取。

4)缓存技术 

命中率(命中次数/总次数)

一级缓存常常是单独服务器,二级缓存指的是web服务器的缓存

页面html缓存;页面局部元素缓存;复杂查询结果集缓存;耗时查询,如产品列表页面;热点查询。

5)分布式存储

6)队列

sql队列:发送email,发送短信等。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

数据库优化:

垂直划分: 用户的不同信息最好存不同表或者数据库中
水平划分: 同一表中数据 存放到2个数据库中,结构也相同。  方法: 如基数id放在A数据库,偶数id放在b数据库; %10也行; hash算法也行。

数据库备份,当出现问题立马切换。切换策略呢?    web服务器,数据库服务器,备份服务器(存放数据库配置,web配置,缓存配置。当遇到问题通过切换策略替代有问题的服务器。直接换

个ip就可以了。)

原文地址:https://www.cnblogs.com/StudyLife/p/3132231.html