
1) 【一句话结论】:针对银行TB级交易数据与实时查询需求,采用TiDB(分布式MySQL)结合冷热分离方案,通过哈希分片、混合索引及分布式事务(强隔离级别SERIALIZABLE),平衡高并发事务与实时分析,历史数据归档至对象存储,确保账户余额查询强一致性,支持低延迟交易明细查询。
2) 【原理/概念讲解】:分布式数据库需解决数据分片、一致性、冷热分离。
3) 【对比与适用场景】:
| 特性/方案 | TiDB(分布式MySQL) | ClickHouse(列式分析型) |
|---|---|---|
| 定义 | 基于MySQL生态的分布式数据库,支持行存+列存混合存储,兼容ACID事务 | 高性能列式数据库,专为实时分析设计,弱事务(最终一致性) |
| 核心特性 | 事务支持(ACID)、分布式事务、MySQL兼容语法、混合存储(行存列存)、冷热分离 | 强分析性能、列式存储、支持实时计算、写入延迟较高(适合批量分析) |
| 使用场景 | 事务型业务(账户余额、交易记录,需高并发写与低延迟读)、实时分析(如实时账单) | 大规模数据分析、报表、市场行情分析(如历史交易数据统计) |
| 注意点 | 分片键需均匀分布(避免热点),复杂事务可能影响性能;冷热分离需合理归档策略(事务提交+延迟监控);需配置强隔离级别(SERIALIZABLE)保障金融一致性 | 不支持复杂事务,写入延迟高,不适合实时事务;列存索引对分析查询优化,但事务处理能力弱;写入延迟可能影响实时查询 |
4) 【示例】:
CREATE TABLE transaction_realtime (
log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
account_id BIGINT,
amount DECIMAL(18,2),
type ENUM('DEPOSIT','WITHDRAWAL'),
created_at TIMESTAMP,
INDEX idx_account_time (account_id, created_at) USING HASH,
SHARDING KEY HASH(account_id) BUCKETS 32
) ENGINE = TiDB;
{
"log_id": 123456,
"account_id": 1001,
"amount": 1000.00,
"type": "DEPOSIT",
"created_at": "2023-10-01 10:00:00",
"archived_at": "2023-11-01 00:00:00"
}
def archive_transactions():
cutoff = datetime.now() - timedelta(days=30)
with db.transaction():
result = db.execute("SELECT * FROM transaction_realtime WHERE created_at < %s", [cutoff])
for row in result:
s3.put_object(
Bucket='bank-archive',
Key=f"transactions/{row['account_id']}/{row['log_id']}.json",
Body=json.dumps(row)
)
if time.time() - start_time > 300: # 超过5分钟
alert("归档延迟超过5分钟")
CREATE MATERIALIZED VIEW transaction_aggregated AS
SELECT account_id, SUM(amount) as total_amount, COUNT(*) as transaction_count
FROM transaction_realtime
WHERE created_at >= '2023-10-01'
GROUP BY account_id
WITH DATA;
5) 【面试口播版答案】:
面试官您好,针对银行TB级交易数据与实时查询需求,我建议采用TiDB结合冷热分离的分布式方案。首先,TiDB的混合存储(行存+列存)和分布式架构能平衡高并发事务与实时分析,比如账户余额查询用行存索引加速,交易明细分析用列存物化视图。数据分片上,采用基于账户ID的哈希分片,将账户数据分散到32个节点,避免热点,减少跨分片查询。对于历史数据,超过30天的交易归档至对象存储,归档时通过事务提交确保数据一致性,延迟监控避免延迟影响。索引设计方面,实时表设置时间+账户ID的复合索引,物化视图预聚合数据,提升分析查询性能。一致性保障通过TiDB的分布式事务(两阶段提交)和强隔离级别(SERIALIZABLE),读写分离的读副本负载均衡(延迟<50ms),满足实时查询需求。总结来说,这个方案能有效支持高并发、低延迟的账户余额与交易明细查询,同时通过冷热分离优化存储成本。
6) 【追问清单】:
7) 【常见坑/雷区】: