1) 【一句话结论】
证券行业需构建混合数据库架构,通过冷热数据分离(历史数据归档至对象存储)、数据同步(CDC/Kafka保障一致性)、分库分表(关系型数据库)和时序/分布式数据库适配(实时/日志数据),平衡性能、扩展性与一致性。
2) 【原理/概念讲解】
- 冷热数据分离:历史数据(如1年以上的交易记录)归档至对象存储(如S3),近期数据(如近30天)保留在关系型数据库(如PostgreSQL),减少存储成本并提升查询效率。
- 数据同步:用Debezium捕获关系型数据库变更(如交易表结构),通过Kafka发送至目标系统,配置事务日志记录变更,补偿机制处理失败消息,保障一致性。
- 分布式数据库一致性:Cassandra采用分片键(如股票代码)实现水平扩展,强一致性(consistency_level=QUORUM)确保交易数据写入后立即可见,但需权衡写入性能(多节点参与导致延迟略高)。
- 时序数据库聚合优化:InfluxDB存储原始行情数据,同时预聚合表存储每小时平均价格,查询时优先从预聚合表获取,减少实时聚合压力。
- 关系型数据库分库分表:按股票代码分表后,跨表查询通过中间层(如ESB)合并结果,或设计联合主键(如股票代码+时间)减少分片数量。
3) 【对比与适用场景】
| 数据库类型 | 定义 | 核心特性 | 适用场景 | 注意点 |
|---|
| 关系型(如PostgreSQL) | 基于关系模型,表结构化,支持ACID事务 | 结构化数据,强一致性,事务隔离 | 历史交易数据(如股票成交记录)、结构化报表 | 扩展性有限(垂直扩展为主),写入延迟较高 |
| 分布式数据库(如Cassandra) | 分布式架构,数据分片存储,高可用 | 高并发读写,水平扩展,最终/强一致性(可配置) | 大规模日志(交易日志、用户行为)、非结构化数据(日志文本)、高吞吐量数据 | 分片键设计关键,跨分片查询复杂 |
| 时序数据库(如InfluxDB) | 专为时间序列数据设计,时间索引 | 时间范围查询高效,数据压缩(如RLE),支持聚合 | 实时行情数据(股票价格)、监控指标(服务器CPU)、设备传感器数据 | 写入性能高(批量写入),复杂聚合可能较慢 |
4) 【示例】
- 冷热数据分离:数据生命周期管理,按月分桶(如2023-01-01~2023-01-31),30天后迁移至S3,ETL工具(如Apache NiFi)批量迁移。
- 数据同步配置:Debezium连接PostgreSQL的
trade_record表,捕获变更;Kafka延迟设置为0,事务日志记录每条变更。
- 分布式数据库分片键:Cassandra表结构为
user_action(user_id, action_time, action_type, stock_code, amount),分片键为user_id,支持高并发写入。
- 时序数据库预聚合:InfluxDB存储原始行情(
measurement, stock_code=000001, price=10.5, time=2023-10-27T10:00:00Z),预聚合表存储每小时平均价格(hourly_avg_price(stock_code, hour, avg_price))。
5) 【面试口播版答案】
(约90秒)
“面试官您好,针对证券行业支持海量历史和实时数据的需求,我建议采用混合数据库架构。核心策略包括:冷热数据分离(历史交易归档至对象存储,近期数据在关系型数据库),数据同步(用Debezium+Kafka保障一致性),分库分表(关系型数据库按股票代码分表,跨表查询通过中间层合并)。比如历史交易用PostgreSQL保证ACID事务,实时行情用InfluxDB支持时间范围查询,日志用Cassandra分片扩展,这样既能保证交易一致性,又能满足实时查询和扩展性。”
6) 【追问清单】
- 问:如何具体实现冷热数据分离?比如数据迁移的步骤和触发条件?
回答要点:按时间分桶(如按月),设置生命周期规则(如30天后迁移至S3),使用ETL工具(如Apache NiFi)批量迁移,触发条件为数据写入后延迟1小时。
- 问:数据同步中,Debezium和Kafka的具体配置如何保障一致性?
回答要点:Debezium配置捕获表结构,Kafka延迟设置为0,事务日志记录变更,补偿机制处理失败消息。
- 问:分布式数据库Cassandra的强一致性配置对交易数据写入性能有何影响?
回答要点:强一致性(QUORUM)确保写入后立即可见,但需更多节点参与,写入延迟略高,适合对一致性要求高的交易数据。
- 问:时序数据库的聚合查询优化,比如预聚合表的设计?
回答要点:预聚合表存储每小时平均价格,查询时优先从预聚合表获取,减少实时聚合压力。
- 问:关系型数据库分库分表后,跨表查询如何优化?
回答要点:通过中间层(如ESB)合并结果,或设计联合主键(如股票代码+时间)减少分片数量。
7) 【常见坑/雷区】
- 坑1:忽略冷热数据分离,导致存储成本过高或查询慢。
- 坑2:数据同步未配置事务日志和补偿机制,导致数据不一致。
- 坑3:分布式数据库分片键设计不当,导致跨分片查询性能差。
- 坑4:时序数据库未做预聚合,导致聚合查询耗时久。
- 坑5:关系型数据库分库分表后跨表查询未优化,影响性能。