51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个高频Tick数据的存储方案,需要支持每秒百万级的数据写入,以及秒级、分钟级的聚合查询,请说明数据库选型、表结构设计、索引策略。

盛丰基金高频策略研究员难度:困难

答案

1) 【一句话结论】采用时序数据库(如InfluxDB)存储原始Tick序列,结合列式数据库(如ClickHouse)构建聚合视图,表结构按时间分片,索引采用时间+字段复合索引,通过列存优化秒级/分钟级聚合,满足百万级写入与低延迟聚合需求。

2) 【原理/概念讲解】高频Tick数据属于时间序列,核心是时间维度与数据点的强关联。时序数据库(如InfluxDB)以时间戳为第一主键,天然支持按时间范围查询,写入时只需追加数据,适合高吞吐写入;列式数据库(如ClickHouse)通过列存存储数据,聚合查询时只需扫描相关列,计算效率高。例如,Tick数据包含时间戳、股票代码、价格、成交量等字段,时序数据库存储原始序列,列式数据库按时间聚合后生成分钟/秒级视图,减少实时查询的I/O开销。

3) 【对比与适用场景】

数据库类型定义核心特性适用场景注意点
InfluxDB时序数据库,专为时间序列设计时间序列为主键,写入高效,支持时间范围查询,支持数据压缩原始Tick数据存储,按时间查询,高写入吞吐不适合复杂关联查询,聚合需额外计算
ClickHouse列式数据库,适合分析型查询列存存储,聚合查询效率高,支持SQL,可扩展秒级/分钟级聚合查询,数据仓库写入延迟较高,适合批量聚合

4) 【示例】

  • 时序数据库(InfluxDB)表结构:
    measurement: stock_tick  
    tags: (symbol: "000001", exchange: "SSE")  
    fields: (price: 10.5, volume: 1000)  
    time: 2023-10-27T10:00:00Z  
    
  • 列式数据库(ClickHouse)聚合表:
    CREATE TABLE tick_agg (  
        symbol String,  
        time_to_part: toDateTime(timestamp, 'UTC'),  
        price Float64,  
        volume UInt64,  
        PRIMARY KEY (symbol, time_to_part)  
    ) ENGINE = ReplacingMergeTree (symbol, time_to_part, price, volume)  
    PARTITION BY toYYYYMMDD(time_to_part)  
    ORDER BY (symbol, time_to_part)  
    
  • 聚合查询(ClickHouse):
    SELECT symbol, avg(price) as avg_price, sum(volume) as total_volume  
    FROM tick_agg  
    WHERE time_to_part BETWEEN toDateTime('2023-10-27 09:30:00') AND toDateTime('2023-10-27 09:30:00') + interval 1 minute  
    GROUP BY symbol  
    

5) 【面试口播版答案】
好的,针对高频Tick数据存储,核心方案是采用时序数据库(如InfluxDB)存储原始序列,结合列式数据库(如ClickHouse)构建聚合视图。具体来说,原始数据按时间分片存储,索引采用时间+字段复合索引,写入时通过批量写入提升吞吐;聚合查询时,列式数据库通过列存优化秒级/分钟级聚合,降低延迟。比如,InfluxDB负责每秒百万级写入,ClickHouse负责秒级聚合,最终满足业务需求。

6) 【追问清单】

  • 问:数据分片策略如何设计?答:按时间分片(如按天或小时),结合符号(股票代码)分片,避免热点数据集中。
  • 问:写入性能如何优化?答:批量写入(如每批1万条),使用压缩算法(如ZSTD),减少网络开销。
  • 问:聚合查询的延迟如何控制?答:列式数据库的列存结构,聚合时只需扫描相关列,计算效率高,延迟低。
  • 问:数据持久化与容灾?答:时序数据库支持数据压缩与备份,列式数据库支持多副本,确保数据可靠性。

7) 【常见坑/雷区】

  • 坑1:选择关系型数据库(如MySQL),无法满足高写入吞吐,索引设计复杂,聚合查询效率低。
  • 坑2:索引设计错误,如仅按时间索引,未结合字段(如股票代码),导致查询效率低。
  • 坑3:未考虑时序数据的特性,如时间分片策略不当,导致热点数据导致性能瓶颈。
  • 坑4:聚合查询未用列式数据库,直接在时序数据库做聚合,导致延迟高。
  • 坑5:数据压缩策略不当,如未压缩导致存储空间大,写入延迟高。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1