我正在开发一个项目,涉及在 GridDB 中管理大型时间序列数据集。目前,随着数据集大小的增长,我遇到了严重的查询延迟问题。虽然 GridDB 在较小的数据集上表现良好,但随着数据集大小的增加,某些查询变得比预期慢。
有关问题的详细信息
以下是一些有助于了解问题背景的具体细节:
数据集大小:5000万条记录(约200GB数据)。
查询性能:在过滤 1 个月范围内的数据时,我当前的查询需要 10 秒才能执行。理想情况下,我希望在 2 秒内完成。
硬件:运行在16核CPU上,具有32GB RAM和SSD存储。
示例查询
这是我正在使用的查询的示例:
选择AVG(温度),MAX(湿度)
来自传感器数据
“2023-01-01”和“2023-01-31”之间的时间戳
AND 位置 = '仓库-1';
我尝试过的
为了解决性能问题,我尝试了以下步骤:
索引:在时间戳和位置列上创建索引。
分区:使用GridDB的容器分区功能按月划分数据。
资源分配:调整了 GridDB 中查询引擎的内存设置。 尽管做出了这些努力,我还没有看到查询性能有明显的改善。
问题
是否可以对 GridDB 中的查询或容器配置应用其他优化,以更有效地处理这种规模?
对于这种大小的数据集,10 秒的查询时间是否正常,还是我在 GridDB 设置中遗漏了某些内容?
任何见解或建议将不胜感激!
您需要在两列上建立基于树的索引,首先是
location
,然后是 timestamp
,以支持这种过滤。
container.create_index(["location", "timestamp"])