面试题答案
一键面试数据分片策略
- 范围分片:根据数据的某个属性范围进行划分,比如按时间范围将日志数据分片。在时间序列数据场景中,以天为单位,每天的数据存放在一个分片。这样新数据不断增加时,只需按时间顺序新增分片,易于扩展。优点是查询特定范围数据高效,缺点是可能导致数据分布不均。实现时,在写入数据前,根据数据时间属性计算出所属分片,写入对应存储节点。
- 哈希分片:对数据的某个标识(如用户ID)进行哈希运算,根据哈希值分配到不同分片。在社交平台用户数据存储中,用用户ID哈希取模确定分片。优点是数据分布均匀,负载均衡好。缺点是数据迁移复杂。实现时,在写入和读取数据时,都对标识进行哈希计算找到相应分片。
- 复合分片:结合范围分片和哈希分片,先按范围分大类,再在每个大类内按哈希分小类。在电商订单系统,先按年份分大分片,每年内再按订单ID哈希分小分片。这种策略兼具两者优点,适合复杂数据场景。实现时需设计多层映射关系来定位数据。
存储结构优化
- 列式存储:适合分析型场景,如大数据统计。以列而不是行的方式存储数据,查询时仅读取相关列,减少I/O。例如在气象数据统计中,查询温度平均值,仅读取温度列。实现时,数据按列组织成文件,不同列文件可独立存储和处理。
- 分层存储:将数据按访问频率分为热、温、冷数据。热数据存于高速存储,如内存;温数据存于普通磁盘;冷数据存于廉价存储,如磁带。在视频平台,热门视频存内存,近期视频存磁盘,历史视频存磁带。实现时,建立数据访问监控机制,定期根据访问频率迁移数据。
- 索引优化:针对经常查询的字段建立索引。在电商商品搜索系统,对商品名称、价格等建立索引。实现时,根据数据特点选择合适索引结构,如B - Tree索引适合范围查询,哈希索引适合等值查询。
网络拓扑调整
- 分布式缓存:在客户端和存储节点间加入缓存层,如Memcached或Redis。电商系统中,缓存热门商品信息。用户请求先到缓存,命中则直接返回,减少后端存储压力。实现时,缓存根据数据访问模式设置过期时间,定期清理。
- 负载均衡:使用硬件(如F5)或软件(如Nginx)负载均衡器,将请求均匀分配到多个存储节点。在大型网站,Nginx根据权重、IP哈希等算法分配请求。实现时,配置负载均衡器规则,监控节点健康状态,及时剔除故障节点。
- 对等网络(P2P):部分场景下,节点既提供服务也消费服务,数据在节点间直接传输,减少中心节点压力。在文件共享系统中,用户节点间直接传输文件。实现时,节点需维护邻居节点列表,通过协议进行数据传输和协调。
实际场景优化案例 - 大型图片存储系统
- 数据分片策略:采用哈希分片,根据图片ID哈希值分配到不同存储节点。这样大量图片上传时,数据均匀分布。在上传图片时,通过计算图片ID哈希值%节点数,确定存储节点。
- 存储结构优化:采用分层存储,热门图片存SSD,普通图片存HDD。通过图片访问日志统计访问频率,定期迁移数据。图片数据按文件形式存储,同时对图片元数据(如尺寸、格式)建立索引。
- 网络拓扑调整:部署负载均衡器(Nginx),将图片请求分配到各存储节点。前端使用CDN(如阿里云CDN)缓存图片,用户请求先到CDN,提高访问速度。配置Nginx根据节点负载动态调整请求分配权重,CDN根据图片热度更新缓存。