位置:首页  >   读书笔记  > 全栈学习-二十七讲

全栈学习-二十七讲

1. 数据库保存和访问是应用的核心


同一数据并发访问瓶颈

 主从同步扩展

    建立主从同步,读写分离架构,下一堂课

2. 不同数据访问量瓶颈

   数据切分扩展

     将数据依据不同的标准进行切分,不在同一个服务器上,不在同一个数据库上,不在同一个表中

3. 关系数据库瓶颈

     缓存,全文检索,NoSQL等


第三章:分库分表的优势和劣势

 1,缺点:

        事物的失效

          不苛求实时一致性,保障最终一致性

    关联功能的失效,不能用join

        使用多个简单的查询来实现复杂的查询

    自增长主键的失效,如何解决

        偏移增加的id,不推荐

         实现ID生成器


id分表解决方案及特点:

   1. 按步长偏移id

         不需要程序介入,但不好扩容

   2.  按时间

         只适合热点,归档性质数据

  3. 按数据量

            扩展方便,但访问不均,修改困难

   4.取模

             分散均匀,扩扩容需要一定规则

    5,映射表

             修改方便,算法复杂且难以预测需求


分库分表的经验和依据

     1. 一般情况下,不需要分库分表

      2,每个表,如果在可预见的空间内,在百万级以内都不需要分表

     3. 访问量大的数据取模分表,相对小的可以尝试范围分表,动态等过期很少访问的按时间分表


    4.如果用户要分表,一般来讲,一个用户会生成很多条的,需要分表也看业务


为什么需要配置库

    配置库屏蔽分库分表的复杂性

   1. 由conf配置信息统一提供

         $host = query($conf,$tbl);

         mysql_connect($host);

    2.配置信息放到后台服务对php完全透明


配置库设计?

  1.纵向分表:

      服务器分组

  2,横向:

      采用相同的数据库名

  3, 主辅库:

       属于同一服务器分组,组内数据完全相同


分库分表的配置库设计

     1. 服务器配置

         服务器里有哪些属性

         支持不支持一个IP多个服务器实例

    2. 表类型配置

         为什么要有表类型

     3,  表配置

        具体的表配置

        哪个分表,在哪个服务器,哪个端口的哪个库下



配置库配套的工具(php代码)

m:    php split_db_sql.php

r:  php split_db_sql.php dbfile=<dbfile> dbname=<dbname>


M: php split_db_sql.php dbfile= ../../doc/project.sql dbname=qzuser

R: 

php newtable.php kind=ly_user sid=1-4 db=qzuser sqlfile=ly_user_0.sql num=4

ly_user_0

php newtable.php kind=ly_group sid=1 db=qzuser sqlfile=ly_group.sql num=1

ly_group

php newtable.php kind=ly_album sid=1 db=qzuser sqlfile=ly_album.sql num=1

ly_album

php newtable.php kind=ly_photo sid=1-4 db=qzuser sqlfile=ly_photo_0.sql num=4

ly_photo_0


//说明: 返回的是一些命令提示


M: php dbtool.php

R:  Usage: php dbtool.php   act=query host=<ip>

                                       act=query msid=<master_sid>

                                       act=query sid=<sid>

                                       act=add host=<host> user=<user> passwd=<passwd>  msid=<master_sid> 

port=<port>

                                        act=alter kind=<kind> cmd=<cmd>

                                        act=online host=<host> port=<port>

                                         act=offline host=<host> port=<port>

                                         act=liston

                                          act=listoff


M: php newtable.php kind=ly_user sid=1-2 db=qzuser sqlfile=ly_user_0.sql num=4


R: 

     kind:ly_user....

table_num = 4 ...

ly_user_0 at  101.251.166.91:3301 qzuser

ly_user_1 at  101.251.166.91:3308 qzuser

ly_user_2 at  101.251.166.91:3301 qzuser

ly_user_3 at  101.251.166.91:3308 qzuser


dbtool.php

a,查询数据库服务器信息

b, 添加数据库服务器,建立主从关系

c,修改表结构,批量修改表结构

d在线,下线服务器

e,显示在线下线服务器


split_db_sql.php 

a自动切分文件

b,自动实现分表检测

newtable.php

 a 指定表格文件

 b 批量建表

c  自动添加到配置库



















































0
文章属性
精彩评论