Community

시계열 데이터를 사용하다보면 결국은 가장 최신 데이터와 조인을 걸고 그리고 그 값을 얼마나 빨리가져오느냐가 가장 관건일것 같은데요. PostgreSQL 기반 TimescaleDB에서 추천하는 방법들

시계열 데이터를 사용하다보면 결국은 가장 최신 데이터와 조인을 걸고 그리고 그 값을 얼마나 빨리가져오느냐가 가장 관건일것 같은데요. PostgreSQL 기반 TimescaleDB에서 추천하는 방법들을 알아봅시다! 1. Naive GROUP BY `SELECT max(time) FROM truck_reading GROUP BY truck_id;` 2. LATERAL JOIN ``` SELECT * FROM trucks t INNER JOIN LATERAL ( SELECT * FROM truck_reading WHERE truck_id = t.truck_id ORDER BY ts DESC LIMIT 1 ) l ON TRUE ORDER BY t.truck_id DESC; ``` 3. SkipScan ``` SELECT DISTINCT ON (truck_id) * FROM truck_reading WHERE ts > now() - INTERVAL '24 hours' ORDER BY truck_id, ts DESC; ``` 4. Loose Index Scan ``` /* * Loose index scan via https://wiki.postgresql.org/wiki/Loose_indexscan */ WITH RECURSIVE t AS ( SELECT min(ts) AS time FROM truck_reading UNION ALL SELECT (SELECT min(ts) FROM truck_reading WHERE ts > t.ts) FROM t WHERE t.ts IS NOT NULL ) SELECT ts FROM t WHERE ts IS NOT NULL UNION ALL SELECT null WHERE EXISTS(SELECT 1 FROM truck_reading WHERE ts IS NULL); ``` 5. Logging table and trigger - 최근 값 따로 쌓기

알림

알림이 없습니다