SlideShare a Scribd company logo
PostgreSQL + PostGIS + TimescaleDB
хранилище для систем мониторинга транспорта
Иван Муратов @ binakot
PgConf.Russia 2019 Moscow
Телематика и Телеметрия
Телематика — область информатики, охватывающая сферу
телекоммуникаций.
Телеметрия — информация о значениях измеряемых параметров объектов
методами и средствами телемеханики.
● Спутниковый мониторинг транспорта
● Организация производства
● Сельское хозяйство
● Многое другое...
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
Юлия Федоренко
@letaur
PostgreSQL + PostGIS + TimescaleDB
PostgreSQL + PostGIS + TimescaleDB = Prosto Proektirui Tablichki (PPT)
Почему не InfluxDB или другая TSDB?
Time Series базы данных:
● https://misfra.me/2016/04/09/tsdb-list
● https://www.outlyer.com/blog/top10-open-source-time-series-databases
● https://github.com/xephonhq/awesome-time-series-database
PostgreSQL
● ORDBMS
● SQL-92, SQL:1999, SQL:2003, SQL:2008, SQL:2011
● Open Source
● Сообщество
Из коробки
● Геометрические типы (point, line, polygon, etc)
https://postgrespro.ru/docs/postgresql/11/datatype-geometric
● Геометрические функции и операторы (length, area, etc)
https://postgrespro.ru/docs/postgresql/11/functions-geometry
● Математические функции и операторы (abs, width_bucket)
https://postgrespro.ru/docs/postgresql/11/functions-math
● Агрегатные функции (sum, avg, corr, percentile_cont, rank)
https://postgrespro.ru/docs/postgresql/11/functions-aggregate
Неструктурированные данные в SQL
● Типы JSON (json, jsonb)
https://postgrespro.ru/docs/postgresql/11/datatype-json
● Функции и операторы JSON
https://postgrespro.ru/docs/postgresql/11/functions-json
PostGIS
● Spatial
● Full SQL
● Open Source
● PostgreSQL Extension
Что умеет PostGIS?
● OGC OpenGIS спецификация
● GEOS и SFCGAL бэкенды
● GDAL для растровых и векторных данных
● TIGER для топологии и геокодирования
● 2D, 3DZ, 3DM и 4D координаты
● WKT и WKB форматы
● Более 3000 SRS
● DE-9IM
● GiST, SP-GiST, BRIN индексы (R-Tree)
● Geohash
● GeoJSON
● ...
Геопространственные данные
https://postgis.net/docs/manual-2.5/index.html
Геопространственные расчеты
И многое другое...
http://postgis.net/workshops/postgis-intro/index.html
TimescaleDB
● Time Series
● Full SQL
● Open Source
● PostgreSQL Extension
Почему DB?
TimescaleDB is an open-source time-series database
(https://docs.timescale.com/introduction)
PgTimescale, pg_timescale?
PipelineDB?
https://blog.timescale.com/1-0-enterprise-production-ready-time-series-database-op
en-source-d32395a10cbf (30.10.2018)
https://www.pipelinedb.com/blog/pipelinedb-1-0-0-high-performance-time-series-ag
gregation-for-postgresql (24.10.2018)
SELECT time_bucket('1 day', time) AS day,
COUNT(*) AS trucks_exiting,
SUM(weight) / 1000 AS tonnage
FROM vehicles
INNER JOIN cities ON cities.name = 'krasnodar'
WHERE ST_Within(last_location,
ST_Polygon(cities.geom, 4326))
AND NOT ST_Within(current_location,
ST_Polygon(cities.geom, 4326))
GROUP BY day
ORDER BY day DESC LIMIT 10;
day | trucks_exiting | tonnage
------------------------+----------------+---------
2019-02-05 00:00:00+00 | 398 | 3644
2019-02-04 00:00:00+00 | 498 | 4654
2019-02-03 00:00:00+00 | 359 | 2604
2019-02-02 00:00:00+00 | 346 | 3616
2019-02-01 00:00:00+00 | 476 | 4200
...
SELECT time_bucket('1 hour', time) AS hour,
avg(speed) AS "avg",
min(speed) AS "min",
max(speed) AS "max"
FROM telemetries
WHERE tracker_imei = 999655959104302
AND time > now() - interval '1 day'
GROUP BY hour
ORDER BY hour ASC;
hour | avg | min | max
------------------------+-----+-----+-----
2019-02-01 12:00:00+00 | 63 | 0 | 78
2019-02-01 13:00:00+00 | 54 | 7 | 61
2019-02-01 14:00:00+00 | 68 | 0 | 76
2019-02-01 15:00:00+00 | 66 | 14 | 81
2019-02-01 16:00:00+00 | 49 | 11 | 56
...
Grafana & TimescaleDB
https://blog.timescale.com/grafana-time-series-exploration-visualization-postgresql-
8c7baa9c3bfe
https://grafana.com/blog/2018/10/15/make-time-series-exploration-easier-with-the-p
ostgresql/timescaledb-query-editor
PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems
А что в итоге?
● SQL + NoSQL (JSON) + Time Series
● Экосистема PostgreSQL
● Открытый исходный код
● Свободное использование
Полезняшки :)
https://t.me/pgsql
https://t.me/postgis
https://blog.timescale.com
@binakot
https://t.me/krddevdays
https://github.com/binakot/PgConf-2019-Moscow-Demo
https://github.com/binakot/PostgreSQL-PostGIS-TimescaleDB
https://geopuzzle.org (Виктор Тыщенко)
The End
Спасибо за внимание!
Вопросы?

More Related Content

What's hot (20)

PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
PDF
Всеволод Поляков "История одного мониторинга"
Fwdays
 
PPTX
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Ontico
 
PDF
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Ontico
 
PDF
Reactive programming для успеха вашего стартапа
Vitebsk DSC
 
PDF
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
PDF
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Ivan Muratov
 
PPT
Доставка видеоконтента пользователям
Media Gorod
 
PPT
Доклад на РИТ: Высокие нагрузки (2008)
Andrey Smirnov
 
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
PDF
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Ontico
 
PDF
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Ontico
 
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Ontico
 
PDF
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
MoscowDataFest
 
PDF
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
PDF
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
Всеволод Поляков "История одного мониторинга"
Fwdays
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Ontico
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Ontico
 
Reactive programming для успеха вашего стартапа
Vitebsk DSC
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Ontico
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Ivan Muratov
 
Доставка видеоконтента пользователям
Media Gorod
 
Доклад на РИТ: Высокие нагрузки (2008)
Andrey Smirnov
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Ontico
 
Очереди и блокировки. Теория и практика / Александр Календарев (ad1.ru)
Ontico
 
Загрузка больших объемов данных для бизнес-аналитики
Badoo Development
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Ontico
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Ontico
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
MoscowDataFest
 
Docker & Puppet: как их скрестить и надо ли вам это?
Anton Turetsky
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Ontico
 

PostgreSQL + PostGIS + TimescaleDB - storage for monitoring systems