• 网站架构设计


    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 //

  • 相关阅读:
    Entity Framework 和NHibernate的区别
    Windows 2008 的TCP/IP原理
    Mono 2.0正式发布了
    自定义Unity对象生命周期管理集成ADO.NET Entity Framework
    Entity Framework(EF)数据查询
    WCF采用 netTcpBinding 发生的Socket errors
    ADO.NET 实体框架概述
    IronPython 2.0 beta 5
    用sp_change_users_login消除Sql Server的孤立用户
    微软修改了Managed Extensibility Framework(MEF)的协议
  • 原文地址:https://www.cnblogs.com/-cyh/p/10164842.html
Copyright © 2020-2023  润新知