Здесь2cOde#59/2017
Накапливай — Анализируй — Действуй
решения:
СУБД: InfluxDB
- База данных временных рядов для обработки высоких нагрузок по записи и запросу
- настройка InfluxDB для хранения данных в течение определенного периода времени, автоматического истечения срока действия и удаления любых нежелательных данных из системы.
- SQL-подобный язык запросов
InfluxDB is a Time Series Database built from the ground up to handle high write & query loads. InfluxDB is a custom high performance datastore written specifically for timestamped data, including DevOps monitoring, application metrics, IoT sensor data, & real-time analytics. Conserve space on your machine by configuring InfluxDB to keep data for a defined length of time, automatically expiring & deleting any unwanted data from the system. InfluxDB also offers a SQL-like query language for interacting with data. @ https://www.influxdata.com/time-series-platform/
CLI (интерфейс командной строки)
- Подключение:
$ influx -precision rfc3339
—
Connected to http://localhost:8086 version 1.3.x
InfluxDB shell 1.3.x
Аргумент-precision
указывает формат/точность любых возвращаемых меток времени. В приведенном выше примереrfc3339
указывает InfluxDB возвращать метки времени в формате RFC3339 (YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ
). - Операции с базой данных:
— Создать —
› создать базу данных HydroFlow
— Список—
› показать базы данных
— Открыть —
› использовать HydroFlow - Исследовать данные
«Данные в InfluxDB организованы по «временным рядам», которые содержат измеренное значение, например «cpu_load» или «температура». Временные ряды имеют от нуля до многихpoints
, по одному для каждой дискретной выборки метрики. Точки состоят изtime
(отметка времени),measurement
(например, cpu_load), как минимум одного ключа-значенияfield
(само измеренное значение, например, «значение = 0,64» или «температура = 21,2») и нуля. ко многим парам "ключ-значение"tags
, содержащим любые метаданные о значении (например, "host=server01", "region=EMEA", "dc=Frankfurt").
‹ синтаксис ›<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]
‹ /syntax ›
—INSERT—
> INSERT cpu,host=serverA,region=us_west value=0.64
также, чтобы установить временную метку:
cpu,host=serverA,region=us_west value=0.64
1401527606061139742
—ВЫБРАТЬ—> SELECT "host", "region", "value" FROM "cpu"
REST API
Создать базу данных
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"
Запись данных
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
Выбрать данные
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'"
Даунсемплинг и очистка
В целях экономии хранилища уменьшайте выборку данных, чтобы сохранить высокоточные необработанные данные только в течение ограниченного времени, и храните сводные данные с более низкой точностью гораздо дольше или навсегда.
InfluxDB предлагает две функции — Непрерывные запросы (CQ) и Политики хранения (RP), — которые автоматизируют процесс уменьшения выборки данных и истечения срока действия старых данных.
# create a default two hours RP > CREATE RETENTION POLICY "two_hours" ON "food_data" DURATION 2h REPLICATION 1 DEFAULT
# create an extended one year RP > CREATE RETENTION POLICY "a_year" ON "food_data" DURATION 52w REPLICATION 1
# data samples CQ for every 30 minutes > CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone" INTO "a_year"."downsampled_orders" FROM "orders" GROUP BY time(30m) END