这个问题是有关这一个.我有一个包含设备功率值的表,我需要计算给定时间跨度的功耗并返回10个最耗电的设备.我已生成192个设备和7742208个测量记录(每个40324).这大约是一个月内设备会产生多少记录.
对于这个数据量,我当前的查询需要40多秒来执行,这太多了,因为时间跨度和设备和测量的数量可能要高得多.我是否应该尝试使用不同于滞后的方法来解决这个问题()OVER PARTITION以及可以进行哪些其他优化?我非常感谢有关代码示例的建议.
PostgreSQL版本9.4
使用示例值查询:
SELECT
t.device_id,
sum(len_y*(extract(epoch from len_x))) AS total_consumption
FROM (
SELECT
m.id,
m.device_id,
m.power_total,
m.created_at,
m.power_total+lag(m.power_total) OVER (
PARTITION BY device_id
ORDER BY m.created_at
) AS len_y,
m.created_at-lag(m.created_at) OVER (
PARTITION BY device_id
ORDER BY m.created_at
) AS len_x
FROM
measurements AS m
WHERE m.created_at BETWEEN '2015-07-30 13:05:24.403552+00'::timestamp
AND '2015-08-27 12:34:59.826837+00'::timestamp
) AS t
GROUP BY t.device_id
ORDER BY total_consumption
DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
表信息:
Column | Type | Modifiers
--------------+--------------------------+----------------------------------------------------------
id | integer | …Run Code Online (Sandbox Code Playgroud) 我正在构建需要拥有docker0的ip地址的应用程序而不使用像ip addr show dev docker0.有没有办法从docker本身获得它可能使用docker命令或其他东西?至少docker info似乎没有表现出来.