对此类数据进行适当的可视化

数据挖掘 时间序列 可视化
2022-03-09 21:21:14

后期编辑:目前正在阅读FlameGraphs 参考书目看起来我正在做的类似于冰柱图,但在 x 轴上有时间流逝。作者提到了这个 FlameGraph 的灵感,它具有这个特定的特征(x 轴上的时间),但我需要继续看看是否有人实现了完全相同的东西。

我希望在我的 Web 服务中可视化嵌套子任务的流程。生成的可视化可能看起来像是树形图、树状图和甘特图的混合体,我觉得有一个标准图表,我正在努力寻找。

数据

每次为请求提供服务时,我都会记录一个对象,该对象包含一个多级 N 树,其中包含该服务为服务该请求所做的所有事情,以及它花费了多长时间。

例如,我记录了数据库调用的开始和结束(相对于请求时间线) ,以及连接执行查询以及将结果处理成模型所需的时间。后三个操作被视为数据库调用的子任务。

这就是简化的执行日志,如下所示。请注意,我有数百个操作,其中一些是 5-10 级深度。

{
    "name": "total", // scope name
    "s": 100,        // start
    "e": 700,        // end
    "c": [           // scopes nested under this one
        {
            "name": "database",
            "s": 200,
            "e": 500,
            "c": [
                {
                    "name": "connect",
                    "s": 200,
                    "e": 300
                },
                {
                    "name": "query",
                    "s": 300,
                    "e": 500,
                    "c":[
                    {
                        "name": "subquery",
                        "s": 400,
                        "e": 470,
                    }]
                }]
                }
            ]
        },
        {
            "name": "ui",
            "s": 510,
            "e": 700,
            "c":[{
                "name": "render",
                "s": 520,
                "e": 690
            }]
        }
    ]
}

目前的方法

我编写了一个小型 Haskell 程序来解析树并将以下图表输出到 HTML 画布上: 当前可视化

目前,我可以很好地表示子任务的嵌套性质,并查看这些任务在时间轴上的相对位置。

不过,我真的不想从头开始构建图表渲染器。

与我考虑过的图表类型的区别

嵌套条形图:条形图的条形通常从 0 开始,所有堆叠通常基于条形大小进行。我需要更多时间线视图。

甘特图:非常相似的想法,但通常将“工作”或“项目”作为行来跟踪,通常不处理嵌套工作。

树形图:在树形图中,所有值都根据它们的标量值分配到区域。在这里,我的区域由行(子任务数)和宽度(任务持续时间,以毫秒为单位)组成

树状图:在数据结构方面很接近,但我想不出一种方法来渲染它,以帮助很好地显示嵌套任务的开始/结束/持续时间。

火焰图/火焰图(后期添加,见顶部编辑):终于找到有类似想法的人了!看起来使用性能分析器软件的人一直在努力可视化嵌套调用堆栈 - 以非常相似的方式,但通过调用计数与持续时间来调整大小。

问题

我在重新发明轮子吗?

我觉得应该存在一个标准的可视化类型(可能也被常用工具很好地支持),它也可以渲染上面的图表。

0个回答
没有发现任何回复~