Отдавна отминаха времената, когато „базата“ беше единична система за управление на релационни бази данни, инсталирана обикновено на най-мощния сървър в центъра за данни. Такава база данни обслужва всякакви заявки - OLTP, OLAP, всичко необходимо за бизнеса. В днешно време базите данни работят на основен хардуер, те също са по-сложни по отношение на високата наличност и специализирани за обработка на определен тип трафик. Специализацията им позволява да постигнат много по-добра производителност - всичко е оптимизирано за работа с определен вид данни:оптимизатор, машина за съхранение, дори езикът не трябва да бъде SQL, както беше в миналото. Може да бъде базиран на SQL с някои разширения, позволяващи по-ефективно манипулиране на данни, или може да бъде нещо напълно ново, създадено от нулата.
Днес имаме аналитични, колонни бази данни като ClickHouse или MariaDB AX, имаме платформи за големи данни като Hadoop, NoSQL решения като MongoDB или Cassandra, хранилища за ключ-стойност като Redis. Имаме и бази данни с времеви серии като Prometheus или TimeScaleDB. Това е, върху което ще се съсредоточим в тази публикация в блога. Бази данни с времеви серии – какво представляват и защо бихте искали да използвате още едно хранилище за данни във вашата среда.
За какво са базите данни от времеви редове?
Както подсказва името, базите данни от времеви серии са предназначени да съхраняват данни, които се променят с времето. Това може да бъде всякакъв вид данни, които са били събрани във времето. Може да са показатели, събрани от някои системи - всички системи с тенденция са примери за данните от времевите редове.
Всеки път, когато погледнете таблата за управление в ClusterControl, вие всъщност разглеждате визуалното представяне на данните от времеви серии, съхранявани в Prometheus, база данни от времеви серии.
Данните от времевите серии не се ограничават до показателите на базата данни. Всичко може да бъде метрика. Как се променя с времето потокът от хора, влизащи в мола? Как се променя трафикът в един град? Как се променя използването на градския транспорт през деня? Воден поток в поток или река. Количество енергия, генерирана от водна инсталация. Всичко това и всичко останало, което може да бъде измерено във времето, е пример за данните от времевия ред. Такива данни можете да търсите, начертаете, анализирате, за да намерите корелации между различните показатели.
Как са структурирани данните в база данни от времеви серии?
Както можете да си представите, най-важната част от данни в базата данни от времеви редове е времето. Има два основни начина за съхранение на данни. Първо, нещо, което прилича на хранилище ключ-стойност, може да изглежда така:
Часово клеймо | Показател 1 |
---|---|
28.03.2019 00:00:01 | 2356 |
28.03.2019 00:00:02 | 6874 |
28.03.2019 00:00:03 | 3245 |
28.03.2019 00:00:04 | 2340 |
Накратко, за всяко клеймо за време имаме някаква стойност за нашия показател.
Друг пример ще включва повече показатели. Вместо да съхранявате всеки показател в отделна таблица или колекция, е възможно да съхранявате няколко показатели заедно.
Часово клеймо | Показател 1 | Показател 2 | Показател 3 | Показател 4 | Показател 5 |
---|---|---|---|---|---|
28.03.2019 00:00:01 | 765 | 873 | 124 | 98 | 0 |
28.03.2019 00:00:02 | 5876 | 765 | 872 | 7864 | 634 |
28.03.2019 00:00:03 | 234 | 7679 | 98 | 65 | 34 |
28.03.2019 00:00:04 | 345 | 3 | 598 | 0 | 7345 |
Тази структура на данните помага за по-ефективно запитване на данните, когато показателите са свързани. Вместо да четете няколко таблици и да ги обединявате, за да получите всички показатели заедно, достатъчно е да прочетете една единствена таблица и всички данни са готови за обработка и представяне.
Може да се чудите – какво наистина има ново тук? Как това се различава от обикновена таблица в MySQL или друга релационна база данни? Е, дизайнът на таблицата е доста подобен, но има значителни разлики в натоварването, което, когато хранилището за данни е проектирано да ги експлоатира, може значително да подобрят производителността.
Данните от времевите серии обикновено се добавят само - малко вероятно е да актуализирате стари данни. Обикновено не изтривате конкретни редове, от друга страна може да искате някакво агрегиране на данните във времето. Това, когато се вземе предвид при проектирането на вътрешните елементи на базата данни, ще направи значителна разлика спрямо „стандартните“ релационни (и не релационни също) бази данни, предназначени да обслужват трафик от типа на обработка на онлайн транзакции:най-важното е способността за последователно съхранение (jngest) големи количества данни, които идват с времето.
Възможно е да се използва RDBMS за съхраняване на данни от времеви серии, но RDBMS не е оптимизирана за това. Данните и индексите, генерирани на гърба му, могат да станат много големи и бавни за запитване. Двигателите за съхранение, използвани в RDBMS, са проектирани да съхраняват различни видове данни. Те обикновено са оптимизирани за работа по онлайн обработка на транзакции, която включва честа промяна и изтриване на данни. Релационните бази данни също са склонни да нямат специализирани функции и функции, свързани с обработката на данни от времеви редове. Споменахме, че вероятно искате да обобщите данни, които са по-стари от определен период от време. Може също така да искате да можете лесно да изпълнявате някои статистически функции на вашите данни от времеви серии, за да ги изгладите, да определите и сравнявате тенденции, да интерполирате данни и много други. Например, тук можете да намерите някои от функциите, които Prometheus предоставя на потребителите.
Примери за бази данни от времеви серии
На пазара има множество съществуващи бази данни с времеви серии, така че не е възможно да се обхванат всички. Все пак бихме искали да дадем някои примери за базите данни от времеви редове, които може би познавате или може би дори използвате (съзнателно или не).
InfluxDB
InfluxDB е създаден от InfluxData. Това е база данни с времеви серии с отворен код, написана на Go. Съхранението на данни предоставя SQL-подобен език за запитване на данните, което улеснява интегрирането на разработчиците в техните приложения. InfluxDB работи също като част от търговско предложение, което обхваща целия стек, предназначен да осигури пълнофункционална, високодостъпна среда за обработка на данни от времеви серии.
Прометей
Prometheus е друг проект с отворен код, който също е написан на Go. Обикновено се използва като бекенд за различни инструменти и проекти с отворен код, например Percona Monitoring and Management. Prometheus също е избрана база данни от времеви серии за ClusterControl.
Prometheus може да бъде разгърнат от ClusterControl, за да се използва за съхраняване на данните от времевите серии, събрани на сървърите на базата данни, наблюдавани и управлявани от ClusterControl:
Тъй като се използва широко в света с отворен код, Prometheus е доста лесен за интегриране в съществуващата ви среда с помощта на множество експортери.
RRDtool
Това може да е пример за база данни от времеви серии, която много хора използват, без да знаят, че правят това. RRDtool е много популярен проект с отворен код за съхранение и визуализиране на данни от времеви серии. Ако някога сте използвали Cacti, той е базиран на RRDtool. Ако сте проектирали свое собствено решение, много вероятно е да използвате и RRDtool като бекенд за съхранение на вашите данни. В днешно време той не е толкова популярен, колкото беше преди, но през 2000 - 2010 г. това беше най-разпространеният начин за съхраняване на данни от времеви редове. Забавен факт - ранните версии на ClusterControl го използваха.
TimeScale
TimeScale е база данни с времеви серии, разработена върху PostgreSQL. Това е разширение на PostgreSQL, което разчита на основното хранилище за данни за предоставяне на достъп до данни, което означава, че приема целия SQL, който може да искате да използвате. Като разширение, той използва всички други функции и разширения на PostgreSQL. Можете да смесвате времеви серии и друг тип данни, например, за да обедините времеви серии и метаданни, обогатявайки изхода. Можете също да направите по-разширено филтриране, като използвате JOIN и таблици, които не са времеви серии. Използването на GIS поддръжка в PostgreSQL TimeScale може лесно да се използва при проследяване на географски местоположения във времето. Той също така може да използва всички възможности за мащабиране, които PostgreSQL предлага, включително репликация.
Timestream
Amazon Web Services също има предложение за бази данни с времеви серии. Timestream беше обявен съвсем наскоро, през ноември 2018 г. Той добавя още едно хранилище за данни към портфолиото на AWS, като този път помага на потребителите да обработват данни от времеви серии, идващи от източници като уреди за Интернет на нещата или наблюдавани услуги. Може също да се използва за съхраняване на показатели, получени от регистрационни файлове, създадени от множество услуги, което позволява на потребителите да изпълняват аналитични заявки към тях, помагайки да се разберат моделите и условията, при които услугите работят.
Timestream, както повечето услуги на AWS, предоставя лесен начин за мащабиране, ако необходимостта от съхраняване и анализиране на данните нараства с времето.
Както можете да видите, на пазара има много опции и това не е изненадващо. Анализът на данни от времеви серии напоследък придобива все по-голяма популярност, става все по-важен за бизнес операциите. За щастие, като се има предвид големия брой предложения, както с отворен код, така и търговски, е много вероятно да намерите инструмент, който да отговаря на вашите нужди.