zoukankan      html  css  js  c++  java
  • 分库解决方案—数据存储

    一、目录

    • 需求
    • 问题
    • 解决方案

    二、需求

    现在有接近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同步。将同步数据打到同步表中,有同步程序同步,同时服务端有接收程序进行处理。        

      

  • 相关阅读:
    django学习笔记(一)
    Python之函数进阶
    Python之函数初识
    Python之文件操作
    基础补充
    字典
    神奇的列表
    万能的字符串
    Python基础(二)
    使用paramiko进行ssh连接
  • 原文地址:https://www.cnblogs.com/sunchong/p/4180625.html
Copyright © 2011-2022 走看看