`
eddysheng
  • 浏览: 111734 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于数据库sharding带来的聚合问题

阅读更多

 

当前我们的 oracle 数据库架构如下:

 



 

如上图所示整个数据库按照 mapping 方案进行了水平 shard (三个核心)以及一个汇总数据库(平台),然后在每一个大表上又进行了垂直 shard (按照数据热度)。无论是垂直切分的数据迁移还是核心到平台的归档数据迁移都是通过数据库的定时任务以及存储过程完成(核心到平台用到了 DBLink )。

 

这种架构虽然带来了很大的灵活性,但同时也给系统带来了很多的复杂性、不可预知性、维护难等缺点。

 

出现的问题:

       对外的应用会定时将平台 DB 的汇总数据通过 FTP 发往其他应用(强约束:必须在早晨 6 点前发送结果),现在就发现这些 FTP 文件并没有生成。

 

分析原因有以下两点:

1.  从核心归档到平台的定时 job 经常无缘无故的停掉,导致核心数据无法按时迁移到平台,初步怀疑是 DBLink bug 导致。

2.  平台的暖表到冷表的数据迁移因为存在很多处理逻辑,消耗时间过长。

 

其实对于数据库的高级复制、定时任务、存储过程等都是由我们专门的 dba 来完成的,我在这方面比较没有发言权,所以我只从应用的角度看如何来解决这个问题。

 

核心到平台的数据归档迁移完没完成我不 care ,我认为的本质问题是 ftp 文件没有生成,所以我就解决这个问题。所有的平台汇总数据在核心 DB 都是已经存在的,只不过核心的数据没有归档到平台而已,因此为了不改变对外的接口,我觉得可以通过如下手段来解决。

 



 

应用将核心表数据的变化提交到核心数据库后,需要发送一个数据变化事件到数据集成模块,然后由数据集成模块来处理事件数据的整合以及定时 ftp 文件发送。

 

这样做的好处就是独立一个模块来处理对外的数据接口,不需要对数据库的归档和迁移脚本作任何处理,以及良好的扩展性,在需要的时候可以增加平台数据更新管道更新平台数据库数据来替换核心到平台归档过程。

 

这种做法同样也有缺点,就是需要对原有应用代码进行侵入来发送数据变更事件。

 

其实我个人觉得数据库已经这样架构了,再想做什么改进已经很困难了,前段时间一直在研究 Command/Query Separation CQS ),其实我觉得我们当前的应用很适合用 CQS 来架构。水平 shard 保持不变,通过事件来更新平台数据库,不过可能并不是严格的数据库读写分离。

  • 大小: 13.8 KB
  • 大小: 12.2 KB
分享到:
评论

相关推荐

    数据库Sharding的基本思想和切分策略

    综上所述,数据库Sharding通过将数据分散到多个服务器上来提高性能和可扩展性,其核心在于合理规划垂直和水平切分策略,以及妥善处理数据分布和一致性问题。正确实施Sharding策略可以帮助企业应对大数据时代的挑战,...

    当当开源sharding-jdbc-轻量级数据库分库分表中间件

    总之,Sharding-JDBC以其简单高效的设计理念、高度兼容性以及出色的性能表现,在数据库分库分表领域内占据了一席之地,对于需要解决大规模数据处理问题的企业来说,是一个值得关注和尝试的选择。

    数据库mysql分库分表-spring-boot-shardingjdbc.zip

    在本项目中,ShardingJDBC负责根据预定义的分片策略,将数据分散到多个数据库和表中,同时处理跨库、跨表的聚合查询。 具体实现过程中,开发者需要定义分片规则,这通常包括分片键(决定数据如何分配到各个库表)、...

    应对sharding-jdbc结合mybatis实现分库分表功能 分表的联合查询采用将mysql的数据同步到elasticsearch进行筛选

    在IT行业中,数据库扩展是解决高并发、大数据量场景下的常见问题。Sharding-JDBC是阿里巴巴开源的一款轻量级的数据库中间件,它允许开发者在不改变任何数据库语句的情况下,实现分库分表的功能,从而提高系统的读写...

    ShardingJDBC-Demo

    ShardingJDBC,作为一个轻量级的Java框架,致力于解决大数据量下的数据库分库分表问题,它无需修改业务代码,只需在配置层面进行调整,即可实现数据的分布式管理。本示例“ShardingJDBC-Demo”将向我们展示如何在...

    database数据库

    3. SQL语言:讲解了SQL的基本语法,如创建数据库和表、插入数据、查询数据(SELECT语句)、更新数据(UPDATE语句)、删除数据(DELETE语句)以及更复杂的联接操作(JOIN)、子查询和聚合函数(COUNT、SUM、AVG等)。...

    elasticsearch数据库

    **Elasticsearch数据库详解** Elasticsearch(简称ES)是一种基于Lucene的开源搜索引擎,它在全文搜索、分析和实时数据存储方面具有出色性能。作为NoSQL数据库的一种,Elasticsearch设计之初的目标就是实现分布式、...

    深入解析MongoDB聚合与索引:提升数据库效能的关键策略

    在MongoDB中,聚合和索引是两个至关重要的概念,对于优化数据库性能和实现高效的数据处理至关重要。 **一、MongoDB聚合** 聚合是MongoDB中处理数据的一种方式,允许用户对集合中的数据进行分析和计算,类似于SQL中...

    mysql分库分表-mysql-sharding-jdbc.zip

    MySQL 分库分表是一种数据库扩展策略,用于解决大数据量下的性能瓶颈问题。在单个数据库无法满足高并发、大数据处理需求时,通过将数据分散到多个数据库实例中,实现水平扩展,提高系统的处理能力和可用性。`mysql-...

    《数据库系统概论》试题.

    - 数据库分区(Partitioning)和分片(Sharding):将大表分成多个小表,提高查询和管理效率。 7. NoSQL数据库: - 非关系型数据库,如文档数据库、图形数据库、键值存储和列族数据库,适合大数据和分布式场景。 ...

    银行分布式数据库改造方案实践与探索 -王辉1

    例如MyCat、Atlas、Cetus、ProxySql、Sharding-JDBC、TDDL、DBLE等中间件,它们负责SQL解析、路由转发、聚合计算,以及分库分表和读写分离。然而,这些中间件也存在语法限制、性能瓶颈和分布式事务处理能力不足的...

    数据库的学习资料

    学习如何在分布式环境中部署和管理数据库,以及理解像Sharding、Replication、读写分离等技术。 7. **实战项目**:理论学习后,实践项目是巩固知识的最佳方式。可能包含创建实际的数据库,编写复杂的SQL查询,解决...

    多种数据库综合汇总简介

    例如,了解MySQL的索引优化、MongoDB的Sharding与Replication、Redis的数据过期策略以及Elasticsearch的倒排索引原理,都是提升数据库性能的关键。 同时,JS作为前端和后端都广泛使用的编程语言,能够无缝连接各种...

    数据库面试资料.rar

    以下是一些可能涵盖的重要概念和问题,它们对于理解和解答数据库面试问题至关重要。 1. 数据库基础: - 数据库是什么?它的作用是什么? - 数据库模型:关系型数据库(如SQL)、非关系型数据库(NoSQL)以及它们...

    分布式数据库系统原理

    8. 分布式数据库的最新进展:近年来,NoSQL数据库和NewSQL数据库的出现为分布式数据库带来了新的解决方案,如MongoDB、Cassandra和Google Spanner等,它们在特定场景下提供了更好的性能和可扩展性。 9. 应用场景:...

    mongoDB非关系型数据库客户端软件

    2. 分布式架构:MongoDB支持分片(sharding)和复制集(replica sets),能够轻松实现水平扩展,以适应大数据量和高并发场景。 3. 弹性查询:MongoDB提供了丰富的查询语言,支持各种查询、排序、聚合操作,以及强大...

    SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    在这个方案中,sharding-jdbc 中间件扮演着核心角色,它可以将一个数据库拆分成多个小的数据库,每个数据库都包含了原始数据库的一部分数据,从而实现了数据的水平分割和垂直分割。 从概念上来说,水平分割是指将一...

Global site tag (gtag.js) - Google Analytics