Здесь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 (интерфейс командной строки)

  1. Подключение:
    $ 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).
  2. Операции с базой данных:
    Создать
    › создать базу данных HydroFlow
    Список
    › показать базы данных
    Открыть
    › использовать HydroFlow
  3. Исследовать данные
    «Данные в 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