• 分库解决方案—数据存储


    一、目录

    • 需求
    • 问题
    • 解决方案

    二、需求

    现在有接近Z台分布式数据库服务器,M台汇总数据库。当前需要将Z台数据库中的每个数据库中的关键性数据同步到汇总数据库上。汇总数据库上的数据要求:实时,准确。

     

    三、问题:

    当前数据量比较大,数据插入更新频繁。当前根据类型分库,如果这一类数据出现问题,那影响的是这一类数据。

    比如,当前有一亿条数据,这些数据分为A类,B类,C类等等。同时,A类数据在Z1数据库上,B类在Z2数据库上,C类在Z3数据库上。这些数据都会有一个唯一的Key

    这样每个类别的数据库分别建立同步机制。当前选择的同步机制是MSSQL发布订阅机制:

    优点:方便

    缺点:实时性差(数据量大时)

       稳定性差(同步数据量大时,服务会停止,需要重新初始化,千万级别的数据就会同步半天甚至一天更多)

       不够灵活(同步挂掉的时候,要从头开始同步,没有标志节点等等)

    这样根据以上的数据库设计,如果这个库的数据同步服务挂掉,那么这一类数据的实时性、准确性都会受到影响。

     

    四、解决方案

    (一)数据存储

    因为数据有唯一的key。不再根据A、B、C类去分类,我们将这些数据全部打散。根据算法存入设置的数据库。每个数据库400万的数据。

    唯一标识 —> 算法—> 转化成1~255 —>分组—>存入数据库

    1)、唯一标识算法码取到对应的值(1~255)

    2)、我们将1~255,分位5组

            Index         Value    

         1      1~50

           2     51~100

           3    101~150

         4    151~200

           5    201~255

    3)、数据库和表

      库:   国家&区域 — Index — 组别 

           D1—Index—1       * D国家1区 —Index — Index=1的,即Value1~50

      表:   国家&区域 — Index(组别) — Data—表编号   

         D1—1—Data—1    * D国家1区 — 组别为1 — Data — Table1  

         D1—1—Data—2    * D国家1区 — 组别为1 — Data — Table2  

      库: 国家&区域 — Index — 组别 

         D1—Index—5       * D国家1区 —Index — Index=5的,即Value201~255

      表:   国家&区域 — Index(组别) — Data—表编号  

         D1—5—Data—1    *D国家1区 — 组别为1 — Data — Table1 

           D1—5—Data—2    *D国家1区 — 组别为1 — Data — Table2  

      库: 国家&区域 — Index — 组别 

         G11—Index—3       * G国家11区 —Index — Index=3的,即Value101~150

      表:   国家&区域 — Index(组别) — Data—表编号  

         G11—3—Data—1    *G国家11区 — 组别为3 — Data — Table1 

           G11—3—Data—2    *G国家11区 — 组别为3 — Data — Table2 

    说明:

      数据根据算法得到的值(1~255),分别存入到对应组别下的数据库中,并且存入第一个表。当对应的的组别下的第一个表存满400万数据,立即在当前组别的数据库下创建第二个表,以此类推。

    好处:

       所有数据Key值算法得到的值(1~255),分散比较平均,而且值是不会变的。这样存储得平均而且分散,如果有新的大量数据进入,也会有很好的扩展性,每个表存满后就会创建新表。

    问题:我们怎样去查数据?

    数据Key—通过算法得到Value—找到对应的Index组别—到对应组别数据库下的表中查询相关数据(多个表可以多个并发)

    (二)数据同步

    因为业务库不能直连,我们采用webservice同步。将同步数据打到同步表中,有同步程序同步,同时服务端有接收程序进行处理。        

      

  • 相关阅读:
    C#程序设计---->计算圆面积windows程序
    MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)
    MMORPG大型游戏设计与开发(服务器 游戏场景 多线程)
    MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
    MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)
    plain framework 1 pak插件说明(资源压缩加密)
    plain framework 1 版本更新 1.0.2 增加打包插件
    plain framework 1 参考手册 入门指引之 许可协议
    plain framework 1 参考手册 入门指引之 代码风格
    plain framework 1 参考手册 入门指引之 模块
  • 原文地址:https://www.cnblogs.com/sunchong/p/4180625.html
Copyright © 2020-2023  润新知