分布式表连接问题
Mycat提供了几种方式来解决表连接问题
使用全局表
全局表是一种冗余的表,每个节点都是全量的数据,有以下特性
- 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
- 全局表的查询操作,只从一个节点获取
- 全局表可以跟任何一个表进行join操作
在配置表的时候加上global就是全局表
1 | <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3"> |
数据库连接是应用的核心依赖,一旦密码配置错误,可能引发连锁反应:连接池持续重试、数据库连接耗尽、应用响应超时。本文将深入分析密码错误导致的连接风暴原理,详解如何通过 Druid 配置防护,并提供故障排查与应急处理方案,帮助你避免类似问题。
当数据库密码配置错误时,应用会出现以下症状:
show full processlist 显示大量 Connect 状态的连接(来自应用服务器 IP);Access denied for user 'xxx'@'xxx' (using password: YES) 错误;activeCount 持续飙升,最终达到 maxActive 上限。密码错误触发了连接池的无限重试机制,形成恶性循环:
Connect 请求,即使认证失败,数据库仍需消耗资源处理请求,导致连接队列拥堵;若多个项目共享同一数据库,一个项目的密码错误重试会占用数据库的连接资源(如 MySQL 默认 max_connections=151),导致其他项目的正常连接请求被阻塞,出现 “一损俱损” 的连锁反应。
Druid 提供了连接错误重试和熔断配置,可有效避免密码错误引发的连接风暴。核心配置包括:
connectionErrorRetryAttempts)0-2(减少无效重试)。HBase 协处理器(Coprocessor)是 HBase 提供的高级特性,允许用户在 RegionServer 或 Master 节点上运行自定义代码,实现类似 “触发器” 或 “存储过程” 的功能。本文将深入解析协处理器的类型、使用场景、实战示例及加载方式,帮助开发者扩展 HBase 的功能边界。
协处理器的设计目标是将计算逻辑下沉到数据存储节点,减少数据传输开销,同时扩展 HBase 的原生功能(如触发器、聚合计算等)。其核心价值在于:
HBase 协处理器分为 Observer 和 Endpoint 两大类,适用场景不同:
Observer 类似数据库的 “触发器”,在特定事件发生时自动执行,如数据写入、表结构修改等。根据监听对象不同,分为以下三类:
| 类型 | 监听对象 | 典型场景 |
|---|---|---|
RegionObserver |
Region 级事件(如 Put、Get、Delete、Scan) | 数据写入校验、二级索引同步、数据脱敏 |
MasterObserver |
Master 级事件(如建表、删表、Region 拆分) | 表结构权限控制、DDL 操作审计 |
WALObserver |
预写日志(WAL)事件(如日志写入、同步) | 日志加密、自定义 WAL 存储 |
Endpoint 类似 “存储过程”,允许通过自定义 RPC 方法扩展 HBase 的 API,支持在服务端执行聚合计算(如 COUNT、SUM),减少客户端与服务端的数据传输。
HBase 提供了丰富的 Java 客户端 API,用于实现数据的增删改查、过滤器查询和计数器等功能。本文基于实战场景,详细讲解 HBase 客户端 API 的核心用法,包括连接管理、数据操作、过滤器使用及计数器功能,帮助开发者快速上手。
在使用 HBase API 前,需确保项目引入 HBase 依赖(以 Maven 为例),并正确配置 HBase 连接信息(hbase-site.xml 需放在项目 classpath 下)。
1 | <dependency> |
HBase 客户端通过 Connection 对象管理与集群的连接,Admin 用于 DDL 操作,Table 用于 DML 操作。
1 | import org.apache.hadoop.hbase.client.Admin; |
使用 Put 类向表中插入或更新数据,需指定 RowKey、列族、列名和值(均为字节数组)。
在生成 Excel 报表时,合并单元格是优化表格可读性的常用手段(如合并相同值的相邻单元格)。EasyExcel 并未直接提供合并单元格的 API,但通过其钩子机制(尤其是 AbstractMergeStrategy 抽象类),可灵活实现自定义合并逻辑。本文将详细讲解如何基于 AbstractMergeStrategy 实现单元格合并,并通过实例演示 “相同值自动合并” 的功能。
EasyExcel 合并单元格的核心是通过 单元格钩子(CellWriteHandler) 监听单元格创建过程,在数据写入时动态判断是否需要合并。具体步骤:
Sheet.addMergedRegion 方法)。AbstractMergeStrategy 是 EasyExcel 提供的合并策略抽象类,实现了 CellWriteHandler 接口,简化了合并逻辑的开发(只需重写 merge 方法)。
以下实现一个通用的合并策略:对指定字段(列),自动合并相邻的相同值单元格。
1 | import com.alibaba.excel.metadata.Head; |
假设需要合并 “部门” 列,实体类如下: