InfluxDB 3 Core 内部
数据如何在 InfluxDB 3 Core 中流转
当数据写入 InfluxDB 3 Core 时,它会经过多个阶段,以确保持久性、优化性能并实现高效查询。每个阶段的配置选项都会影响系统行为,平衡可靠性和资源使用。
写入数据流
当写入的数据在 InfluxDB 3 Core 中流转时,它会遵循结构化的路径,以确保持久性、高效查询和优化存储。
图:InfluxDB 3 Core 和 Enterprise 的写入请求、响应和摄取流程
写入验证和内存缓冲区
- 流程:InfluxDB 在接受数据进入系统之前会验证传入的数据。
- 影响:防止格式错误或不受支持的数据进入数据库。
- 详情:数据库会验证传入的数据并将其存储在写入缓冲区(内存中)。如果设置了
no_sync=true,服务器会在 不等待持久化完成的情况下 发送响应以确认写入。
预写日志 (WAL) 持久化
- 流程:数据库每秒(默认)将写入缓冲区刷新到 WAL。
- 影响:通过将数据持久化到对象存储来确保持久性。
- 权衡:更频繁的刷新可以提高持久性,但会增加 I/O 开销。
- 详情:每秒(默认),数据库会将写入缓冲区刷新到预写日志 (WAL) 中进行持久化存储。如果设置了
no_sync=false(默认),服务器会发送响应以确认写入。
查询可用性
- 流程:在 WAL 持久化后,系统会将数据移至可查询缓冲区。
- 影响:实现对近期数据的快速查询。
- 权衡:较大的缓冲区可以加快查询速度,但会增加内存使用量。
- 详情:WAL 持久化完成后,数据会移至可查询缓冲区,从而可供查询。默认情况下,服务器会缓冲多达 900 个 WAL 文件(15 分钟的数据)。
Parquet 存储
- 流程:每十分钟(默认),数据会被持久化到对象存储中的 Parquet 文件。
- 影响:提供持久的长期存储。
- 权衡:更频繁的持久化可以减少对 WAL 的依赖,但会增加 I/O 成本。
- 内存使用:持久化过程在将数据转换为 Parquet 格式时会使用配置的内存池(
exec-mem-pool-bytes)中的内存。对于写入密集型工作负载,请确保分配了足够的内存。 - 详情:每十分钟(默认),InfluxDB 3 Core 会将可查询缓冲区中最旧的数据以 Parquet 格式持久化到对象存储,并将剩余数据(最近 5 分钟)保留在内存中。
内存缓存
- 流程:最近持久化的 Parquet 文件会被缓存在内存中。
- 影响:通过最小化对象存储访问来降低查询延迟。
- 详情:InfluxDB 3 Core 将 Parquet 文件放入内存缓存,以便对最近持久化数据的查询无需访问对象存储。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。