azure 为timesies数据库选择正确的设置

ibrsph3r  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(87)

我正在寻求有关如何优化我的timeseries数据库设置的建议,该数据库应处理大量的时间序列数据。我有大约20,000个持续时间为一年的时间序列配置文件,使用季度时间分辨率(每小时4个时间戳)。这相当于大约7亿个条目。现在,我正在使用带有timescaledb扩展的Azure PostgreSQL服务器。
以下是我的设置的详细信息:

硬件规格:

4个四核16 GiB内存512 GB存储数据库结构:我有两个表,一个用于负载配置文件,列为(id、time、value、sensor_id),另一个表用于负载配置文件,列为(id、sensor_id)。负载配置文件表上有两个索引,一个在(sensor_id,time)上,另一个在sensor_id上。

**示例查询:**我用来聚合数据的一个典型查询是:

SELECT AVG(value), time
FROM public.loadprofilepool
WHERE sensor_id IN (
    SELECT id 
    FROM public.sensor_table
    ORDER BY RANDOM()
    LIMIT 500
)
GROUP BY time;

字符串
请注意,这是一个示例查询,其中实时生成sensor_id列表,以模拟不同传感器集的检索。在真实的情况中,id列表可能来自其他地方,并且可能包含几个到几千个传感器id。

**数据分布:**目前,每个传感器有24 * 4 * 365行(一年,每季度),有20,000个传感器。未来,还将有实时传感器数据,其数据分布将取决于特定的传感器。
**性能指标:**运行这些查询时,CPU使用率不超过20%,内存使用率保持在40%左右。

考虑到这些细节,我正在努力提高查询速度。提取10到1000个配置文件并将它们相加以生成每个时间戳的时间序列目前需要大约5秒到几分钟,而我的目标是几千个传感器的聚合需要几秒钟。

问题如下:

1.我当前的设置对于处理和查询这种数量和类型的时间序列数据是否最有效?如果没有,你能提出替代方法吗?我考虑过NoSQL数据库、使用Zarr的云存储或NetCDF文件,但我不确定哪一种更合适。
1.如何优化当前设置以获得更快的查询结果?是否有特定的TimescaleDB或PostgreSQL配置或优化、索引策略或查询公式化策略有助于提高性能?
提前感谢您的帮助。任何建议或指导将不胜感激。
最好的问候,汉尼斯
我已经尝试创建不同的索引并对loadprofilepool表进行集群。

qc6wkl3g

qc6wkl3g1#

我鼓励您创建概念验证并尝试不同的选项。
您可以用途:

  • 用于缓存的Azure Redis
  • Azure时间序列洞察
  • Azure数据湖第2代
  • Azure Synapse

选哪一个?这取决于成本、性能、团队成员对这些产品的了解……

brtdzjyr

brtdzjyr2#

TimescaleDB的设置有一些指导原则。下面是列表的子集
1.定义项目的目标。它是读取优化/更快的写入/存储优化
1.确定用例的块间隔大小。例如,较低值到块间隔使得摄取更快,使用最佳存储(因为保留在块级别运行),但是运行较长持续时间的读取查询将减慢
1.尝试让活动块占用25%或更少的RAM
1.启用压缩以实现存储优化,而不会丢失数据
1.开始使用连续聚合,这样可以避免每次查询原始数据时都进行聚合
1.最重要的是,阅读查询的执行计划。有时,您会看到执行计划扫描的所有块比预期的块多
有关更多详细信息,请阅读博客https://www.timescale.com/blog/timescale-parameters-you-should-know-about-and-tune-to-maximize-your-performance/

相关问题