zoukankan      html  css  js  c++  java
  • [案例]如何异构一个数十亿级别的数据库

    数据源为mysql,目标介质为elasticsearch。


    1、 我们能利用的资源

    1.1 源数据模型

    源库是别人(库存)的数据,分为A,B,C三种类型的库存模型,需要将三种类型的模型整合成一中通用库存模型方便我方(商家)做业务。
    典型的互联网企业是协作方式,通过数据副本实现业务之间的解耦。

    1.2 特殊表(非重点)

    D为库存占用订单详情,也要异构一份。

    1.3 分库分表

    ABCD均做了分库分表,A(16个库,4096张表),B(1,512),C(1,256),D(8,1024)

    1.4 数据量

    数据总量在数十亿级别

    1.5 线上影响

    不影响对方业务,数据源只有对方mysql分组中对应的抽数从库。
    mysql分组解释

    1.6 性能要求

    未来要支持复杂的条件查询,对查性能有很高要求,目标介质是ES。


    2、 难点

    2.1 导数

    交易库存复杂的分片规则,数据量大,导数是个大工程。

    2.2 更新频繁

    写操作频繁,ES 创建索引的tps能否满足要求。

    2.3 一致性如何保证

    通过mq 实现 base最终一致性。


    3、 最终方案

    3.1 系统整体架构

    图 kczongti

    首先增量数据采用canal做收集(图中binLake同集群化canal),ABC库全部存入es,D库存入mysql。

    3.2 如何做全量倒库

    图 kcdaoku

    sop对应的类型A,使用多个topic分散消息中间件压力,同时解决中间件同一topic的连接数限制。

    3.3 如何提高es写性能(bulk)

    图 kcbulk

    通过jmq异步创建es索引,通过redis队列实现bulk模式提交对应用的透明化

    如何提高Elasticsearch性能

    如何提高Elasticsearch性能


    1. solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;

    2.ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。

    • 如何提高ES性能:
    • 1.ES更新操作尽量提供批处理,减少写入次数;(bulk)
    • 2.按商家维度分多套集群, 在集群里再按照商家维度分片;
    • 3.热点集中问题解决方案:路由规则可定制化由ES团队负责;
    • 4.提供数据重建reindex功能,要求mapping配置source为true;(方便重建数据)
    • 5.ES团队要求,业务方需要提供至少10台物理机用以部署;
    • 6.深分页条数建议控制在1万条以内,做分页用scroll方式实现,禁止跳转到大页

    Elasticsearch同Solr对比

    Elasticsearch同Solr对比

    二者安装都很简单;
    Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
    Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
    Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
    Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

    Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

    1. solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;

    2.ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。

     

    并发数-吞吐量-响应时间

    并发数-吞吐量-响应时间

    用于指网站性能/服务器性能时候:并发数:系统同时处理的请求数(分为查询类请求数、事务类请求数)。
    吞吐量:系统在单位时间内处理请求的数量。只不过是一个很宽泛的术语,
    大家经常指的吞吐量的单位可能是:TPS/QPS、页面数/秒、人数/天、处理业务数/小时等等。
    几个相关的概念:

    TPS、QPS、RPSTPS:Transactions Per Second(每秒事务处理数),
    指服务器每秒处理的事务次数。一般用于评估数据库、交易系统的基准性能。

    QPS:Queries Per Second(查询量/秒),
    是服务器每秒能够处理的查询次数,例如域名服务器、Mysql查询性能。

    RPS:Request Per Second(请求数/秒)
    RPS(Request Per Second)和QPS可以认为是一回事。

    RT:Response Time(响应时间):客户端发一个请求开始计时,到客户端接收到从服务器端返回的响应结果结束所经历的时间,
    响应时间由请求发送时间、网络传输时间和服务器处理时间三部分组成。也叫Think Time。

    并发数与TPS/QPS的关系:QPS(TPS)= 并发数/平均响应时间这里的并发数如果为事务处理请求数,则为TPS,如果为查询请求数,则为QPS。

  • 相关阅读:
    ASIHttpRequest框架使用说明-----post请求 以及监听网络
    tableView中当我们向右滑动不出现删除按钮(实现了代理方法)的原因
    自定义view 添加动画的时候一定要注意
    判断一个点是否在view上
    Razor视图引擎 语法学习(二)
    Razor视图引擎 语法学习(一)
    Razor语法大全
    文件
    win10下的使用
    gdb调试器的使用
  • 原文地址:https://www.cnblogs.com/java920043111/p/9286291.html
Copyright © 2011-2022 走看看