在分片的MySQL中存储时间序列数据以支持查询洞察

在分片的MySQL中存储时间序列数据以支持查询洞察

💡 原文英文,约2000词,阅读约需8分钟。
📝

内容提要

PlanetScale每天处理超过100亿个客户查询。使用Apache Kafka和分片的PlanetScale数据库构建可扩展的遥测管道。Insights从数据库级别和查询模式级别提取数据。存储数据库级别数据使用Prometheus,查询模式级别数据使用分片的PlanetScale数据库。混合解决方案满足高基数和复杂过滤需求。

🎯

关键要点

  • PlanetScale每天处理超过100亿个客户查询,需要收集、存储和服务遥测数据以支持Insights工具。
  • 使用Apache Kafka和分片的PlanetScale数据库构建可扩展的遥测管道。
  • 从数据库级别和查询模式级别提取数据,包括数据库级别的时间序列数据和查询模式级别的时间序列数据。
  • 高基数的查询模式数据存储在分片的PlanetScale数据库中,而数据库级别数据适合存储在Prometheus中。
  • Insights管道从VTGate开始,VTGate是一个代理查询流量的Vitess组件。
  • Instrumentation设计目标是确保不会降低数据库性能或导致不可用性。
  • 使用限流器限制每个时间间隔的唯一查询模式数量,以避免内存消耗过大。
  • 数据通过Kafka异步发布,确保在Kafka故障期间仍能处理查询。
  • Kafka消费者每秒向MySQL数据库写入约5000条记录,数据库集群根据客户数据库ID进行分片。
  • Insights数据库集群最初有四个分片,后来增加到八个以应对写入量的增加。
  • 使用DDSketch高效收集和存储百分位数据,能够合并多个来源的数据。
  • MySQL被用于存储时间序列数据,原因包括高基数查询模式的存储成本和对数据集的过滤需求。
  • 通过Kafka和Vitess分片,能够随着数据量的增加扩展Insights管道的各个组件。
➡️

继续阅读