Bao Tingyu's Blog

数据同步策略概览

数据同步在业务开发中比较普遍,例如 订阅MySQL的binlog将数据同步至异构数据库。数据同步方案需要考虑一下几点: 数据实时性要求 数据量级 是否有数据转换逻辑 可分为两种模式 发布订阅模式:分为订阅数据库log还是订阅应用层发的消息 点对点模式:分为推和拉 以下讨论几种比较通用的方法: 日志订阅:订阅数据生产方库表日志,如mysql的binlog ...

数据库实例迁移实践

背景 随着业务发展,数据库实例磁盘逐渐升高,告警频繁,且后续可能会对DDL产生影响(尤其是借助ghost等工具执行的DDL)。 该实例有多个库,则需要迁移其中的一个或几个单库到其他实例,为什么不做分库分表?一是没必要,数据增长没有那么快;二是改动大,影响范围大。 故采用库实例迁移的方式来缓解磁盘压力。 依赖梳理 库本身的迁移好办,麻烦的是库下游的依赖迁移,比如DTS、大数据等依赖。所以...

树型结构数据存储实践

很多业务场景会遇到树形结构的数据,如公司的人员职级树、行政区划树等。 使用类似MySQL的数据库进行存储,需要将树形结构(二维)存储到行格式(一维)的db中。 本文介绍了树型结构数据存储的三种方式:Adjacency Table , Nested Set , Bridge Table (Closure Table)。 以下方法均基于场景: 设想一个职员团队树,节点中为职工工号id和职工名...

星型模式:业务模型扩展字段存储

构建业务模型时,通常模型会设置扩展信息,存储上一般使用JSON格式存储到db中。JSON虽然有较好的扩展性,但并没有结构化存储的类型和非空等约束,且强依赖代码中写入/读取时进行序列化/反序列化操作, 当扩展信息结构简单且不作为查询条件时使用JSON可以满足需求,但有些场景要求根据扩展字段进行查询,虽然有类似JSON_CONTAINS关键字匹配JSON内部字段,但不是所有db及其版本都支持JS...

业务代码插件式开发实践

在学习编程初期,会接触到设计模式的概念:23种设计模式,单例模式,策略模式,… 。接触业务研发后,对设计模式的使用和实践有了更深的见解。 使用设计模式是目的为了更高效的支撑业务诉求,如何在保证代码质量的情况下变更/扩展现有功能,这里的代码质量可分为健壮性和可读性两大类,分别包含以下方面: 健壮性:并发控制、事务、单点变更、性能、可测试 可读性:业务语义、圈复杂度、认知复杂度、c...