sql - 如何将时间序列数据中的列作为数组返回
问题描述
我正在使用 postgres 和 timescaledb 来记录将用于仪表板/图表的数据。
我在获取我需要的数据时没有任何问题我只是不确定我是否以最有效的方式进行操作。
说我有这个查询
SELECT time, queued_calls, active_calls
FROM call_data
ORDER BY time DESC LIMIT 100;
通过为每个值重复列名,我觉得这是非常低效的。
以更有效的方式发送数据会更好吗,例如每列作为这样的数据数组。
{
time: [...],
queued_calls: [...],
active_calls: [...]
}
我想我的问题是,我是否应该重组我的查询,以便列数据以某种方式在数组中,或者这是我应该在服务器上的查询之后在将其发送到客户端之前做的事情?
-- 更新 -- 附加信息
我使用带有 Express 和 Sequelize 作为 ORM 的 Node.js,但是在这种情况下,我只是通过 Sequelize 执行原始查询。
我在前端使用的图表库也将系列数据作为数组,所以我试图用一块石头杀死两只鸟。
前端图表数据格式:
xaxis:{
categories: [...time]
}
series:[
{name: "Queued Calls", data: [...queued_calls]},
{name: "Active Calls", data: [...active_calls]}
]
后端代码:
async function getLocationData(locationId) {
return await db.sequelize.query(
'SELECT time, queued_calls, active_calls FROM location_data WHERE location_id = :locationId ORDER BY time DESC LIMIT 100;',
{
replacements: { locationId },
type: QueryTypes.SELECT,
}
);
}
...
app.get('/locationData/:locationId', async (req, res) => {
try {
const { locationId } = req.params;
const results = await getLocationData(parseInt(locationId));
res.send(results);
} catch (e) {
console.log('Error getting data', e);
}
});
解决方案
如果服务器在发送时压缩数据,那么如果您以您正在考虑的数组结构发送数据,那么它不会对网络层产生太大影响。
如果您使用数组结构,您认为您正在破坏 JSON 的好处之一——数据结构。您可能会获得一些速度提升,但如果您想查看一段时间内的活动调用,您必须拥有正确的索引 - 并打开索引错误的可能性。
我建议保留数据原样。
推荐阅读
- ruby-on-rails - 无法在 Claudinary + Ruby on Rails 上生成图像
- kotlin - 抽象方法中类类型参数的类型推断
- sql - 使用标签分隔和拆分字符串
- swiftui - 使用按钮和@State / @Binding 时,SwiftUI 视图不会改变
- python - 线性分类器的 3D 决策边界未正确绘制
- java - Hibernate 延迟初始化的解决方法不起作用
- txt - 将大文本文件放入 Mongo DB
- laravel - 将 Laravel 应用程序部署到 Heroku 时出现 guzzel 错误
- html - css断点响应规则
- matlab - 如何将文件脚本调用到使用 simout 文件的 simulink 块中?