`
hpgary
  • 浏览: 81734 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

数据库多维度水平拆分架构

    博客分类:
  • Java
阅读更多

 1、数据库为什么要水平拆分

       由于业务发展数据量越来越大,例如淘宝、京东、58等等大型网站单表是绝对无法存储那么大的数据量的,因此出现了数据水平拆分,以某个字段取模、hash等方式将数据水平分割存到不同数据库上去存储,达到快速查询的目的。

 

2、为什么要“多维度”

在一条数据中,往往可能在前台通过多个纬度进行在线查询需求。

举例说明:常见的订单中心多维度业务分析

订单表设计如下:

Order(oid, buyer_uid, seller_uid, createtime,detail,postage...)

其中:

oid为订单ID,主键

buyer_uid为买家uid

seller_uid为卖家uid

createtime, money, postage …等为订单属性

典型的架构设计为:


order-center: 订单中心,提供restful接口

order-db: 数据库,存储系统

订单数量会越来越大,数据库需要进行水平拆分,用哪个字段进行切分就成了需要解决的关键技术问题:

通过oid进行拆分,那么buyer_uid和seller_uid则需要遍历多个库

通过buyer_uid或者seller_uid进行拆分查询另外一个字段时候需要遍历多个库。

这样就很难有一个两全齐美的方式。

 

常见的查询方式:

订单实体查询:通过订单id查询,这样查询占80%

用户订单列表查询:这样的查询占12%

商家订单列表查询:这样的查询占8%

看到这样的数据,有些人可能会认为以订单id拆分就好了,其他两个占比很小,可以忽略。我想说的是虽然占比很小,但是这个数据量也是很庞大的,不容忽略,所以要以最优的方式让商家和用户订单都能快速查询到自己的订单列表,于是就有下面的架构图:



商家查询订单实时性要求不是很高,因此可以采用此架构。

order-db1 是通过buyer_id水平拆分后的

 

这时候可能有些人就有一个问题了,这里都是通过buyer_id和seller_id拆分数据,那通过订单id不是要遍历多个库,其实不用的,买家通过id查找,使用买家id查找在哪个库上,在通过该sql去指定库查询

 

0
0
分享到:
评论

相关推荐

    架构师修炼笔记 MySQL架构设计之数据库拆分技术方法 共45页.pptx

    水平拆分,也称为分片(sharding),是根据数据的某个字段将数据分散到多个数据库实例中,通常用于处理大量数据和高并发的情况。这种拆分方法可以有效减少单个实例的压力,但会增加业务逻辑的复杂性,因为需要在应用...

    【Hadoop与大数据38】构建生态化分布式数据库架构体系(陶勇)

    - Table水平拆分 - 实时日志解析 - 事务顺序 - 实时镜像 - 双向同步 - 同步事务支持 - GlobalID - GlobalFailover #### 分布式数据库解决方案 在阿里巴巴B2B平台中,分布式数据库解决方案旨在应对海量数据处理需求...

    藏经阁-互联网架构转型中的数据库实践.pdf

    -数据存储与计算能力扩展水平拆分-DBA成本、应用改造成本业务增速快复杂-扩容成本高业务复杂、读写混合-主库成为瓶颈多维度数据操作-跨分片事务跨分片唯一性-全局唯一主键分布式数据库拆分方式丰富,对应用透明平滑...

    海量存储和高并发的数据库架构设计实践.pptx

    垂直拆分是按照业务功能将数据分离,比如将用户信息和订单信息分别存入不同的表,而水平拆分则是通过分库分表来增加系统的存储能力。在企业级案例中,用户库、商品库和系统消息库的分表实践被提及。这些案例展示了...

    企业级数据库架构探索.pptx

    ScaleOut策略则通过水平扩展,如DRDS(分布式关系型数据库服务)实现数据的水平拆分,达到线性扩展的目的。这种方式能够根据业务需求动态调整资源,例如RDS实例的增减,以应对业务高峰。 2. **稳定性与高可用性**:...

    构建生态化分布式数据库架构体系.pdf

    Cobar的主要功能是数据分片,即将大规模的数据按照一定的规则(如哈希、范围)分布到多个物理节点上,实现水平拆分,从而提高读写性能。在早期版本(v0.6-1.0.x)中,Cobar遇到了CPU和IO资源消耗过高、Oracle索引过...

    架构拆分-如何让笨重的系统架构变灵巧.docx

    - **数据库拆分**:根据业务需求将数据库拆分成多个较小的数据库,如用户数据库、商品数据库等。 **3. 业务拆分** 业务拆分是在应用层面按照功能特点进行拆分,将复杂的业务逻辑拆解为更细粒度的服务。这种方式...

    京东应用架构设计

    京东还特别强调了“N+1”原则、可监控、多维度拆分等架构设计原则,并通过自动化运维来提高整个系统的可用性和可靠性。 关于618经验,京东分享了其在大型促销活动中的架构设计经验,这些经验对于电商行业的应用架构...

    微博数据库那些事儿:3个变迁阶段背后的设计思想.pdf

    对于预期会产生大量数据的业务,如博文,进一步进行了水平拆分,即根据索引和内容分别进行hash和时间维度的拆分,确保了查询性能。此外,引入了Memcached加速数据获取流程,提升了用户体验。 ### 成熟阶段 随着...

    京东应用架构设计---免费

    架构分解原则涵盖了水平扩展、垂直拆分、业务分片和水平拆分等策略。水平扩展(复制)和读写分离是提升数据库并发处理能力的有效方法。垂直拆分则是将不同的业务系统分开,实现应用解耦。业务分片是指将业务根据功能...

    京东金融数据架构实践.pdf

    3. **OLTP/OLAP分离**:将OLTP业务分散到关系型数据库(如MySQL),通过水平拆分扩展处理能力;OLAP操作则通过Hbase数据中心进行集中存储和查询。 4. **面向用户分离**:根据用户维度(系统、个人、商户)进行数据...

    采用分布式技术重塑证券公司IT架构.pdf

    而垂直拆分则是将证券公司业务系统按部门、功能或前中后台等多个维度进行拆分,以实现系统的模块化和解耦,便于组织管理和后期的维护。 4. SOA架构及ESB:面向服务的架构(SOA)是一种企业系统架构设计模式,其核心...

    技术架构设计原则

    Z轴扩展则是将数据或服务拆分成多个部分,每个部分可以单独扩展。这些扩展方法应该基于帕累托原则(20/80法则)来优先考虑那些能够带来最大效益的部分,以此简化范围并优化设计。 正确工具的选择则强调了在架构设计...

    某银行的数据库项目, 数据挖掘/数仓项目 后端jjava ,oracle 数据库

    - **多维度客户描述**:利用数据挖掘技术,从多个角度分析客户,以便更好地理解客户需求和行为。 - **数据整合与接口提供**:将分散的数据集中到一个中心数据库,并提供统一的数据接口供内部部门使用。 #### 二、...

    互联网金融数据云平台架构.pptx

    该系统具备全局自增ID、多维度表拆分、异步审计日志等功能,确保在水平扩展的基础上保持高可用性。 【数据库云PaaS平台】提供自动化运维管理,包括MySQL数据库的智能管理,能够实时监控健康状态,自动化添加从机,...

    关于数据仓库维度数据处理的方法探究系列

    3. **剧烈变化维度**:这类维度变化非常频繁,通常需要特殊处理,如拆分成多个缓慢变化维度。 #### 三、维度数据处理对策 维度数据处理策略取决于业务需求和数据库性能要求。 1. **无变化维度处理**:对于此类...

    京东应用架构设计.pptx

    5. **解耦/拆分** - 垂直拆分、业务分片、水平拆分等方法优化架构。 6. **抽象化** - 服务、数据库、服务器的抽象化,降低依赖性。 7. **弱依赖** - 通过异步调用来减少跨域依赖。 **技术架构** 1. **无状态** - ...

Global site tag (gtag.js) - Google Analytics