1.大访问量解决方案?
负载均衡技术:以太网通道 ; windos NBL ; linux lvs , ; F5
冗余技术(集群):linux HA集群技术
解决单点故障
0 0 (主) 1(从) 集群圈(集群圈里都是通过一根心跳线来连接,当一个服务器宕机了,则选举另一台)
0 (交换机) nginx(负载均衡) LVS(地址装换到服务器) 0 1
0 0
lvs负载均衡技术:
OSI七层模型:
1.物理层 :连接线缆的标准
2.数据链路层 :加mac地址的标记(网卡的物理地址) 802.3,802.2
3.网络层:源ip地址,目的ip地址 ip
4.传输层 : 源端口,目的端口 tcop/udp
5.会话层 :通信状态 操作系统
6.表示层 : 编码方式 ASCII
7.应用层 :
大数据存储
MySQL 主从复制:
主数据库用来写,从数据库用来读,通过主数据库的binary_log日志进行同步到从数据库来保证数据的一致性
水平分表:
垂直分表:
分区技术:将一张表分成若干张表存储,业务层无需修改表名,名称不变
解决水平分表修改业务逻辑sql的维护修改难问题
分区(partition by range(year(date))) (by range(一般用这个,给定个连续的区间) ; by list(适合枚举类型确认的固定下拉), by hash(一般用于测试), by key(没用))
partioton by hash(id)
partioton 5 --以id分五个区域
为什么用分区?:
ans:因为用水平分表的模式,会造成php代码层维护更难(需要改查询的表名,还要写一个php路由层来判断选择哪张表)
逻辑上,物理上减压,分表技术虽然物理层减压,但是逻辑上增压,不符合程序设计,所以产生了分区.
分区写法?:
ans:
partition by range(id)(
partition p0 values less than(5)
partition p1 values less than(10)
partioton p2 values less than(15)
);
partition by range(year(peirod))(
partition p1 values less than(2016)
partition p2 values less than(2017)
partition p3 values less than(2018)
partition p4 values less than maxvalue
)
myisam的表,增删改查的速度快 插入速度 200万/s
索引大小可能大于数据大小(两三倍),1000万行数据占用250m大小,花了两分钟左右时间(id 及索引)
分区文件存储格式(myisam)?:
ans:
.frm表描述文件
.par 分区标志
p0.myd 数据存放
p0.myi 索引存放
p1.myd 数据存放
p1.myi 索引存放
p2.myd 数据存放
p2.myi 索引存放
mysql 存储过程?
写一个插入八百万数据,按年来分区的存储过程?:
create procedure load_part()
begin
declare v int default 0;
while v < 8000000 do
insert into part_tab values(v,testing_partitions,adddate('1995-01-01',(rand(v)*36520) mod 3650));
set v = v+1;
end while
end //