精华内容
下载资源
问答
  • InfluxDB是开源时序型数据库,由Go写成,被广泛应用于监控系统,如cpu利用率,io,内存等指标;穿戴设备,如心率,体温;IoT实时数据等场景。InfluxDB 官方网站:...

    InfluxDB

    InfluxDB是开源时序型数据库,由Go写成,被广泛应用于监控系统,如cpu利用率,io,内存等指标;穿戴设备,如心率,体温;IoT实时数据等场景。InfluxDB 官方网站:https://www.influxdata.com/products/influxdb-overview/

    什么是时间序列数据

    数据源每隔一段时间产生一条数据,除了时间戳和值不一样,其他都相同。比如cpu使用率,随着时间变化,它产生的数据就是时间序列数据。

    InfluxDB 主要特性

    • 部署简单;
    • 极强的写能力以及高压缩率;
    • InfluxQL:类SQL的查询语句;
    • 具有一系列聚合函数;

    InfluxDB 重要概念

    database:数据库
    measurement:数据库表
    point:一行数据

    Point由时间戳(time)、标签(tags)和值(field)组成
    time:每条数据记录的时间,也是数据库自动生成的主索引
    tags:各种有索引的属性
    fields:各种记录的值

    InfluxDB 安装配置

    下载安装包
    wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.4.x86_64.rpm 
    
    安装influxdb
    yum install influxdb-1.2.4.x86_64.rpm -y 
    
    启动influxDB
    systemctl start influxdb

     

    常用InfluxQL

    ## 数据库操作
    show databases; 
    create database mytest; 
    drop database mytest; 
    
    
    ## 查看measurement
    show measurements;
    
    
    # 插入数据
    INSERT cpu,host=serverA,region=us_west value=0.64 
    INSERT temperature,machine=unit42,type=assembly external=25,internal=37 
    
    # 查看数据
    SELECT "host", "region", "value" FROM "cpu" 
    SELECT * FROM "temperature" 
    
    # 用表名通配符,同时查看多个表记录
    # SELECT * FROM /.*/ LIMIT 10 
    
    # 查询条件
    SELECT * FROM "cpu " WHERE "value" > 0.9 limit 10
    
    # 删除数据
    delete from "cpu" where host='serverA' 

    来源:https://blog.oxings.com/article/30.html

     

     

    展开全文
  • 实时数据库和关系数据库有着很多的不同,但是目前实时数据库和关系数据库集成的趋势越来越明显。将生产管理信息系统中使用的关系数据库和实时数据库集成到一起,可以同时满足控制和管理的要求,真正成为管理控制一体...
  • 时序数据库介绍和使用

    万次阅读 多人点赞 2018-06-10 18:17:08
    用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。    对时序数据进行建模的话,...

    1.基础

    1.1 时序数据的定义

    什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。它普遍存在于IT基础设施、运维监控系统和物联网中。
      
    对时序数据进行建模的话,会包含三个重要部分,分别是:主体,时间点和测量值。套用这套模型,你会发现你在日常工作生活中,无时无刻不在接触着这类数据。

    • 如果你是一个股民,某只股票的股价就是一类时序数据,其记录着每个时间点该股票的股价。
    • 如果你是一个运维人员,监控数据是一类时序数据,例如对于机器的CPU的监控数据,就是记录着每个时间点机器上CPU的实际消耗值。

    时序数据从时间维度上将孤立的观测值连成一条线,从而揭示软硬件系统的状态变化。孤立的观测值不能叫时序数据,但如果把大量的观测值用时间线串起来,我们就可以研究和分析观测值的趋势及规律。

    1.2 时序数据的特点

    1.2.1 时序数据的数学模型

    上面介绍了时序数据的基本概念,也说明了分析时序数据的意义。那么时序数据该怎样存储呢?数据的存储要考虑其数学模型和特点,时序数据当然也不例外。所以这里先介绍时序数据的数学模型和特点。

    下图为一段时序数据,记录了一段时间内的某个集群里各机器上各端口的出入流量,每半小时记录一个观测值。这里以图中的数据为例,介绍下时序数据的数学模型(不同的时序数据库中,基本概念的称谓有可能不同,这里以腾讯CTSDB为准):

    • measurement: 度量的数据集,类似于关系型数据库中的 table;

    • point: 一个数据点,类似于关系型数据库中的 row;

    • timestamp: 时间戳,表征采集到数据的时间点;

    • tag: 维度列,代表数据的归属、属性,表明是哪个设备/模块产生的,一般不随着时间变化,供查询使用;

    • field: 指标列,代表数据的测量值,随时间平滑波动,不需要查询。
      这里写图片描述
      如上图所示,这组数据的measurement为Network,每个point由以下部分组成:

    • timestamp:时间戳

    • 两个tag:host、port,代表每个point归属于哪台机器的哪个端口

    • 两个field:bytes_in、bytes_out,代表piont的测量值,半小时内出入流量的平均值
      同一个host、同一个port,每半小时产生一个point,随着时间的增长,field(bytes_in、bytes_out)不断变化。如host:host4,port:51514,timestamp从02:00 到02:30的时间段内,bytes_in 从 37.937上涨到38.089,bytes_out从2897.26上涨到3009.86,说明这一段时间内该端口服务压力升高。

    1.2.2 时序数据特点

    • 数据模式: 时序数据随时间增长,相同维度重复取值,指标平滑变化:这点从上面的Network表的数据变化可以看出。
    • 写入: 持续高并发写入,无更新操作:时序数据库面对的往往是百万甚至千万数量级终端设备的实时数据写入(如摩拜单车2017年全国车辆数为千万级),但数据大多表征设备状态,写入后不会更新。
    • 查询: 按不同维度对指标进行统计分析,且存在明显的冷热数据,一般只会频繁查询近期数据。

    1.3 时序数据的存储

    1.3.1 传统关系型数据库存储时序数据的问题

    有了时序数据后,该存储在哪里呢?首先我们看下传统的关系型数据库解决方案在存储时序数据时会遇到什么问题。

    很多人可能认为在传统关系型数据库上加上时间戳一列就能作为时序数据库。数据量少的时候确实也没问题。但时序数据往往是由百万级甚至千万级终端设备产生的,写入并发量比较高,属于海量数据场景。

    MySQL在海量的时序数据场景下存在如下问题:

    • 存储成本大:对于时序数据压缩不佳,需占用大量机器资源;
    • 维护成本高:单机系统,需要在上层人工的分库分表,维护成本高;
    • 写入吞吐低:单机写入吞吐低,很难满足时序数据千万级的写入压力;
    • 查询性能差:适用于交易处理,海量数据的聚合分析性能差。

    另外,使用Hadoop生态(Hadoop、Spark等)存储时序数据会有以下问题:

    • 数据延迟高:离线批处理系统,数据从产生到可分析,耗时数小时、甚至天级;
    • 查询性能差:不能很好的利用索引,依赖MapReduce任务,查询耗时一般在分钟级。

    可以看到时序数据库需要解决以下几个问题:

    • 时序数据的写入:如何支持每秒钟上千万上亿数据点的写入。
    • 时序数据的读取:如何支持在秒级对上亿数据的分组聚合运算。
    • 成本敏感:由海量数据存储带来的是成本问题。如何更低成本的存储这些数据,将成为时序数据库需要解决的重中之重。

    1.3.2 时序数据库

    ***时序数据库产品的发明都是为了解决传统关系型数据库在时序数据存储和分析上的不足和缺陷,这类产品被统一归类为时序数据库。***针对时序数据的特点对写入、存储、查询等流程进行了优化,这些优化与时序数据的特点息息相关:

    1. 存储成本:
      利用时间递增、维度重复、指标平滑变化的特性,合理选择编码压缩算法,提高数据压缩比;
      通过预降精度,对历史数据做聚合,节省存储空间。

    2. 高并发写入:
      批量写入数据,降低网络开销;
      数据先写入内存,再周期性的dump为不可变的文件存储。

    3. 低查询延时,高查询并发:
      优化常见的查询模式,通过索引等技术降低查询延时;
      通过缓存、routing等技术提高查询并发。

    1.3.3 时序数据的存储原理

    传统数据库存储采用的都是 B tree,这是由于其在查询和顺序插入时有利于减少寻道次数的组织形式。我们知道磁盘寻道时间是非常慢的,一般在 10ms 左右。磁盘的随机读写慢就慢在寻道上面。对于随机写入 B tree 会消耗大量的时间在磁盘寻道上,导致速度很慢。我们知道 SSD 具有更快的寻道时间,但并没有从根本上解决这个问题。

    对于 90% 以上场景都是写入的时序数据库,B tree 很明显是不合适的。

    业界主流都是采用 LSM tree 替换 B tree,比如 Hbase, Cassandra 等 nosql 。这里我们详细介绍一下。

    LSM tree 包括内存里的数据结构和磁盘上的文件两部分。分别对应 Hbase 里的 MemStore 和 HLog;对应 Cassandra 里的 MemTable 和 sstable。

    LSM tree 操作流程如下:

    1. 数据写入和更新时首先写入位于内存里的数据结构。为了避免数据丢失也会先写到 WAL 文件中。
    2. 内存里的数据结构会定时或者达到固定大小会刷到磁盘。这些磁盘上的文件不会被修改。
    3. 随着磁盘上积累的文件越来越多,会定时的进行合并操作,消除冗余数据,减少文件数量。
      这里写图片描述

    可以看到 LSM tree 核心思想就是通过内存写和后续磁盘的顺序写入获得更高的写入性能,避免了随机写入。但同时也牺牲了读取性能,因为同一个 key 的值可能存在于多个 HFile 中。为了获取更好的读取性能,可以通过 bloom filter 和 compaction 得到,这里限于篇幅就不详细展开。

    ###1.3.4 分布式存储
    时序数据库面向的是海量数据的写入存储读取,单机是无法解决问题的。所以需要采用多机存储,也就是分布式存储。

    分布式存储首先要考虑的是如何将数据分布到多台机器上面,也就是分片(sharding)问题。下面我们就时序数据库分片问题展开介绍。分片问题由分片方法的选择和分片的设计组成。

    ####分片方法
    时序数据库的分片方法和其他分布式系统是相通的。

    • 哈希分片:这种方法实现简单,均衡性较好,但是集群不易扩展。
    • 一致性哈希:这种方案均衡性好,集群扩展容易,只是实现复杂。代表有 Amazon 的 DynamoDB 和开源的 Cassandra。
    • 范围划分:通常配合全局有序,复杂度在于合并和分裂。代表有 Hbase。

    分片设计

    分片设计简单来说就是以什么做分片,这是非常有技巧的,会直接影响写入读取的性能。

    **结合时序数据库的特点,根据 measurement+tags 分片是比较好的一种方式,因为往往会按照一个时间范围查询,这样相同 metric 和 tags 的数据会分配到一台机器上连续存放,顺序的磁盘读取是很快的。**再结合上面讲到的单机存储内容,可以做到快速查询。

    进一步我们考虑时序数据时间范围很长的情况,需要根据时间范围再分成几段,分别存储到不同的机器上,这样对于大范围时序数据就可以支持并发查询,优化查询速度。

    如下图,第一行和第三行都是同样的 tag(sensor=95D8-7913;city= 上海),所以分配到同样的分片,而第五行虽然也是同样的 tag,但是根据时间范围再分段,被分到了不同的分片。第二、四、六行属于同样的 tag(sensor=F3CC-20F3;city= 北京)也是一样的道理。
    这里写图片描述

    1.4 开源时序数据库介绍

    1.4.1开源时序数据库对比

    目前行业内比较流行的开源时序数据库产品有 InfluxDB、OpenTSDB、Prometheus、Graphite等,其产品特性对比如下图所示:
    这里写图片描述

    1.4.2 InfluxDB介绍

    InfluxDB是一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。而InfluxDB自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。

    重要概念

    influxdb里面有一些重要概念:database,timestamp,field key, field value, field set,tag key,tag value,tag set,measurement, retention policy ,series,point。结合下面的例子数据来说明这几个概念:

    name: census
    -————————————
    time                     butterflies     honeybees     location   scientist
    2015-08-18T00:00:00Z      12                23           1         langstroth
    2015-08-18T00:00:00Z      1                 30           1         perpetua
    2015-08-18T00:06:00Z      11                28           1         langstroth
    2015-08-18T00:06:00Z      3                 28           1         perpetua
    2015-08-18T05:54:00Z      2                 11           2         langstroth
    2015-08-18T06:00:00Z      1                 10           2         langstroth
    2015-08-18T06:06:00Z      8                 23           2         perpetua
    2015-08-18T06:12:00Z      7                 22           2         perpetua
    

    timestamp
    既然是时间序列数据库,influxdb的数据都有一列名为time的列,里面存储UTC时间戳。

    field key,field value,field set
    butterflies和honeybees两列数据称为字段(fields),influxdb的字段由field key和field value组成。其中butterflies和honeybees为field key,它们为string类型,用于存储元数据。

    而butterflies这一列的数据12-7为butterflies的field value,同理,honeybees这一列的23-22为honeybees的field value。field value可以为string,float,integer或boolean类型。field value通常都是与时间关联的。

    field key和field value对组成的集合称之为field set。如下:

    butterflies = 12 honeybees = 23
    butterflies = 1 honeybees = 30
    butterflies = 11 honeybees = 28
    butterflies = 3 honeybees = 28
    butterflies = 2 honeybees = 11
    butterflies = 1 honeybees = 10
    butterflies = 8 honeybees = 23
    butterflies = 7 honeybees = 22
    

    在influxdb中,字段必须存在。注意,字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。

    tag key,tag value,tag set
    location和scientist这两列称为标签(tags),标签由tag key和tag value组成。location这个tag key有两个tag value:1和2,scientist有两个tag value:langstroth和perpetua。tag key和tag value对组成了tag set,示例中的tag set如下:

    location = 1, scientist = langstroth
    location = 2, scientist = langstroth
    location = 1, scientist = perpetua
    location = 2, scientist = perpetua
    

    tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型 如果你的常用场景是根据butterflies和honeybees来查询,那么你可以将这两个列设置为tag,而其他两列设置为field,tag和field依据具体查询需求来定。

    measurement
    measurement是fields,tags以及time列的容器,measurement的名字用于描述存储在其中的字段数据,类似mysql的表名。如上面例子中的measurement为census。measurement相当于SQL中的表,本文中我在部分地方会用表来指代measurement。

    retention policy
    retention policy指数据保留策略,示例数据中的retention policy为默认的autogen。它表示数据一直保留永不过期,副本数量为1。你也可以指定数据的保留时间,如30天。

    series
    series是共享同一个retention policy,measurement以及tag set的数据集合。示例中数据有4个series,如下:

    Arbitrary series number	Retention policy	Measurement	Tag set
    series 1	autogen	census	location = 1,scientist = langstroth
    series 2	autogen	census	location = 2,scientist = langstroth
    series 3	autogen	census	location = 1,scientist = perpetua
    series 4	autogen	census	location = 2,scientist = perpetua
    

    point
    point则是同一个series中具有相同时间的field set,points相当于SQL中的数据行。如下面就是一个point:

    name: census
    -----------------
    time                  butterflies    honeybees   location    scientist
    2015-08-18T00:00:00Z       1            30           1        perpetua
    

    database
    上面提到的结构都存储在数据库中,示例的数据库为my_database。一个数据库可以有多个measurement,retention policy, continuous queries以及user。influxdb是一个无模式的数据库,可以很容易的添加新的measurement,tags,fields等。而它的操作却和传统的数据库一样,可以使用类SQL语言查询和修改数据。

    influxdb不是一个完整的CRUD数据库,它更像是一个CR-ud数据库。它优先考虑的是增加和读取数据而不是更新和删除数据的性能,而且它阻止了某些更新和删除行为使得创建和读取数据更加高效。

    更多详细介绍请见:https://www.jianshu.com/p/a1344ca86e9b

    2.部署

    2.1 influxdb部署

    yum部署:
    <1> 配置YUM源

    cat <<EOF| sudo tee /etc/yum.repos.d/influxdb.repo
    [influxdb]
    name = InfluxDB Repository- RHEL\$releasever
    baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
    enabled = 1
    gpgcheck = 1
    gpgkey = https://repos.influxdata.com/influxdb.key
    EOF
    

    <2> yum安装

    yum install influxdb -y
    systemctl start influxdb
    systemctl enable influxdb
    

    rpm部署:

    wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2.x86_64.rpm
    yum -y localinstall influxdb-1.5.2.x86_64.rpm
    

    docker部署:

    docker run --name=influxdb -d -p 8086:8086 -v /etc/localtime:/etc/localtime daocloud.io/liukuan73/influxdb:1.4        
    		
    

    备注:假如是收集collectd的内容,还需要映射25826端口-p 25826:25826
    ##2.2 grafana部署
    rpm部署:

    wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_64.rpm
    yum -y localinstall grafana-5.0.4-1.x86_64.rpm 
    systemctl enable grafana-server
    systemctl start grafana-server
    

    docker部署:

    docker run -d -p 3000:3000 --name=grafana -e "GF_SERVER_HTTP_PORT=3000" -e "GF_AUTH_BASIC_ENABLED=false" -e "GF_AUTH_ANONYMOUS_ENABLED=true" -e "GF_AUTH_ANONYMOUS_ORG_ROLE=Admin"  -e "GF_SERVER_ROOT_URL=/" daocloud.io/liukuan73/grafana:5.0.0
    
    

    3.使用

    有三种方法可以将数据写入InfluxDB,包括:

    • 客户端库
    • 调用restapi
    • 命令行(类sql语句)
      ##3.1 调用客户端库操作influxdb
      以collectd+influxdb+grafana为例介绍通过collectd采集主机性能指标,然后通过influxdb的客户端库写入influxdb,最后在grafana展示的完整过程。

    3.1.1 collectd部署

    1、yum安装

    sudo yum -y install epel-release
    sudo yum -y install collectd
    

    2、数据写入 influxdb ,修改配置

    vi /etc/collectd.conf
    LoadPlugin network
    <Plugin network>
    #       # client setup:
            Server "10.142.232.155" "25826"
    #       <Server "239.192.74.66" "25826">
    </Plugin>
    systemctl enable collectd
    systemctl start collectd
    systemctl status collectd
    

    3.1.2 influxdb配置

    1、创建collectd数据库

    influx -host '10.142.232.155' -port '8086'
    Connected to http://127.0.0.1:8086 version 1.5.2
    InfluxDB shell version: 1.5.2
    > create database collectd
    > use collectd
    > create user "collectd" with password '123456' with all privileges
    

    2、配置influxdb,开启对collectd数据的接收

    vim /etc/influxdb/influxdb.conf
    [[collectd]]
      enabled = true
      port = 25826											
      database = "collectd" 		#刚创建的collectd数据库,来自collectd的数据写入这个数据库。没事先创建好的话会启动失败
    

    3.1.3 grafana配置

    1、配置influxdb数据源

    点击“Add data source”配置数据源:
    这里写图片描述

    2.配置dashboard

    网络流量统计
    创建graph,切换编辑模式“Toggle Edit Mode”, 然后输入自定义SQL查询
    这里写图片描述
    输入查询语句:

    SELECT derivative("value") AS "value" FROM "interface_rx" WHERE "host" = 'k8sslave04' AND "type" = 'if_octets' AND "instance" = 'eno16777984'
    

    备注:
    函数 derivative 意为导数, 微积分中的概念. value 为传输总量(字节), derivative(“value”) 为 value 在时间上的增量.其中:

    • host = k8sslave04
    • type = if_octets
    • instance = eno16777984

    系统负载
    这里写图片描述
    输入查询语句:

    SELECT mean("value") FROM "load_longterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
    SELECT mean("value") FROM "load_midterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
    SELECT mean("value") FROM "load_shortterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
    

    内存用量
    这里写图片描述
    输入查询语句:

    SELECT mean("value") FROM "memory_value" WHERE "type_instance" = 'used' AND $timeFilter GROUP BY time($interval) fill(null)
    

    效果
    这里写图片描述

    3.2 RestAPI操作

    3.2.1 实例

    创建数据库:
    要创建数据库,请将POST请求发送到/query终结点,并将URL参数q设置为CREATE DATABASE。 下面的示例主机上运行的InfluxDB发送请求,并创建数据库test:

    curl -i -XPOST http://influxdb-ip:8086/query --data-urlencode "q=CREATE DATABASE test"
    

    写入单条数据:
    通过向/write端点发送POST请求,HTTP-API是将数据写入InfluxDB的主要方式。下面的例子向test数据库写了一个点。 数据由度量cpu_load_short,标签键host和region和对应的标签值server01和us-west,字段值为0.64的字段键value和时间戳1434055562000000000组成。

    curl -i -XPOST 'http://influxdb-ip:8086/write?db=test' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
    

    写入点时,必须在db查询参数中指定一个现有的数据库。 如果您没有使用rp查询参数提供保留策略,则会将点写入数据库的默认保留策略。 请参阅API参考文档以获取可用查询参数的完整列表。

    写入多条数据:
    一次将多个点Post到不同序列,只需要用行将多个点分隔即可。这种批量方式具有高性能。以下示例将三个点写入数据库mydb。 第一点属于拥有度量cpu_load_short及标签集host = server02且用服务器本地时间戳的序列。第二点属于拥有度量cpu_load_short及标签集host = server02,region =us-west且具有指定时间戳1422568543702900257的序列。第三个点与第二个点具有相同的指定时间戳,但是将其写入拥有度量cpu_load_short和标签集direction=in,host=server01,region=us-west的序列。

    curl -i -XPOST 'http://influxdb-ip:8086/write?db=test' --data-binary 'cpu_load_short,host=server02 value=0.67
    cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
    cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'
    

    写入来自文件的数据:
    通过将@filename传给curl来从文件中写入点。文件中的数据应该遵循InfluxDB的行协议语法。格式正确的文件示例(cpu_data.txt):

    cpu_load_short,host=server02 value=0.67
    cpu_load_short,host=server02,region=us-west value=0.55 1422568543702900257
    cpu_load_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257
    

    将cpu_data.txt中数据写入mydb数据库:

    curl -i -XPOST 'http://influxdb-ip:8086/write?db=test' --data-binary @cpu_data.txt
    

    注意:如果数据文件中超过5,000个点,可能需要将该文件分成几个文件,以便将数据批量写入InfluxDB。 默认情况下,HTTP请求在五秒钟后超时。 InfluxDB在超时之后仍然会尝试写出这些点,但是不能确认它们是否成功写入。

    ###3.2.2 HTTP响应总结

    • 2xx:如果你的写请求收到HTTP 204 No Content,那就成功了!
    • 4xx:InfluxDB无法理解请求。
    • 5xx:系统过载或严重受损。

    无架构设计
    InfluxDB是一个无架构的数据库。 您可以随时添加新的度量,标签和字段。请注意,如果您尝试写入与已写入数据类型不相同的数据(例如,将字符串写入之前接受整数的字段),InfluxDB将拒绝这些数据。

    错误响应的例子:

    将浮点数写入先前接受布尔值的字段中:

    curl -i -XPOST 'https://influxdb-ip:8086/writedb=hamlet' --data-binary 'tobeornottobe booleanonly=true'
    
    curl -i -XPOST 'https://influxdb-ip:8086/writedb=hamlet' --data-binary 'tobeornottobe booleanonly=5'
    

    返回:

    HTTP/1.1 400 Bad Request
    Content-Type: application/json
    Request-Id: [...]
    X-Influxdb-Version: 1.4.x
    Date: Wed, 01 Mar 2017 19:38:01 GMT
    Content-Length: 150
    
    {"error":"field type conflict: input field \"booleanonly\" on measurement \"tobeornottobe\" is type float, already exists as type boolean dropped=1"}
    Writing a point to a database that doesn’t exist:
     curl -i -XPOST 'https://localhost:8086/writedb=atlantis' --data-binary 'liters value=10'
    returns: 
     HTTP/1.1 404 Not Found
    Content-Type: application/json
    Request-Id: [...]
    X-Influxdb-Version: 1.4.x
    Date: Wed, 01 Mar 2017 19:38:35 GMT
    Content-Length: 45
    
    {"error":"database not found: \"atlantis\""}
    Next steps
    Now that you know how to write data with the built-in HTTP API discover how to query them with the Querying Data guide! For more information about writing data with the HTTP API, please see the API reference documentation.
    

    将点写入不存在的数据库

    curl -i -XPOST 'https://localhost:8086/writedb=atlantis' --data-binary 'liters value=10'
    

    返回:

    HTTP/1.1 404 Not Found
    Content-Type: application/json
    Request-Id: [...]
    X-Influxdb-Version: 1.4.x
    Date: Wed, 01 Mar 2017 19:38:35 GMT
    Content-Length: 45
    
    {"error":"database not found: \"atlantis\""}
    

    3.3命令行操作

    InfluxDB提供类SQL语法,如果熟悉SQL的话会非常容易上手。
    一些操作实例请见:https://www.linuxdaxue.com/influxdb-basic-operation.html

    参考:

    http://www.infoq.com/cn/articles/storage-in-sequential-databases
    https://zhuanlan.zhihu.com/p/32627177
    https://segmentfault.com/a/1190000006868587
    http://www.zhimengzhe.com/shujuku/MySQL/414763.html
    https://blog.csdn.net/a464057216/article/details/53043551
    https://blog.csdn.net/wudufeng/article/details/78567866
    https://www.linuxdaxue.com/influxdb-basic-operation.html
    https://www.jianshu.com/p/a1344ca86e9b

    展开全文
  • 参考:Prometheus时序数据库-内存中的存储结构 - 无毁的湖光-Al - 博客园 (cnblogs.com) Prometheus时序数据库-磁盘中的存储结构 - 无毁的湖光-Al - 博客园 (cnblogs.com) LSM树 - 知乎 (zhihu.com) LSM树原理探究 ...

    按series存储。
    哈希取余
    倒排索引:方便查询多条series。
    符号表:存储将label排序,然后按序号索引获取,降低了存储开销,并且可以进行正则匹配。
    正则匹配

    block合并,主要是合并索引。
    通过WAL预写日志的方式,防止数据丢失。
    参考:Prometheus时序数据库-内存中的存储结构 - 无毁的湖光-Al - 博客园 (cnblogs.com)
    Prometheus时序数据库-磁盘中的存储结构 - 无毁的湖光-Al - 博客园 (cnblogs.com)
    LSM树 - 知乎 (zhihu.com)
    LSM树原理探究 (juejin.cn)

    展开全文
  • 一些基本概念(不同的时序数据库称呼略有不同) Metric: 度量,相当于关系型数据库中的 table。 Data point: 数据点,相当于关系型数据库中的 row。 Timestamp:时间戳,代表数据点产生的时间。 Field: 度量下的...

    目录

     时序数据库InfluxDB 性能测试

    为什么时序数据库更快


     时序数据库场景

    TSDB和其他数据库非常不同的属性包括:时间戳、数据存储和压缩、数据生命周期管理、数据汇总、处理大量记录的时间序列相关扫描的能力以及时间序列感知查询。

     

      

    时序数据的几个特点

    1. 基本上都是插入,没有更新的需求。

    2. 数据基本上都有时间属性,随着时间的推移不断产生新的数据。

    3. 数据量大,每秒钟需要写入千万、上亿条数据

     

    业务方常见需求

    1. 获取最新状态,查询最近的数据(例如传感器最新的状态)

    2. 展示区间统计,指定时间范围,查询统计信息,例如平均值,最大值,最小值,计数等。。。

    3. 获取异常数据,根据指定条件,筛选异常数据

    常见业务场景

    1、聚会计算、短期保持高精度(经常需要删除数据)

    2.大量的统计查询要求,查询一定时间范围内的计数、最大值、最小值和平均值。

    监控软件系统: 虚拟机、容器、服务、应用

    监控物理系统: 水文监控、制造业工厂中的设备监控、国家安全相关的数据监控、通讯监控、传感器数据、血糖仪、血压变化、心率等

    资产跟踪应用: 汽车、卡车、物理容器、运货托盘

    金融交易系统: 传统证券、新兴的加密数字货币

    事件应用程序: 跟踪用户、客户的交互数据

    商业智能工具: 跟踪关键指标和业务的总体健康情况

    在互联网行业中,也有着非常多的时序数据,例如用户访问网站的行为轨迹,应用程序产生的日志数据等等。

    一些基本概念(不同的时序数据库称呼略有不同)

    Metric:  度量,相当于关系型数据库中的 table。

    Data point:  数据点,相当于关系型数据库中的 row。

    Timestamp:时间戳,代表数据点产生的时间。

    Field:  度量下的不同字段。比如位置这个度量具有经度和纬度两个 field。一般情况下存放的是随时间戳而变化的数据。

    Tag:  标签。一般存放的是不随时间戳变化的信息。timestamp 加上所有的 tags 可以视为 table 的 primary key。

    例如采集有关风的数据,度量为 Wind,每条数据都有时间戳timestamp,两个字段 field:direction(风向)、speed(风速),两个tag:sensor(传感器编号)、city(城市)。第一行和第三行,存放的都是 sensor 编号为86F-2RT8的设备,城市是深圳。随着时间的变化,风向和风速发生了改变,风向从56.4变为45.6,风速从2.9变为3.6。

    需要解决的几个问题

    时序数据的写入:如何支持每秒钟成千上亿条数据的写入。

    时序数据的读取:如何支持在秒级对上亿条数据的分组聚合运算。

    成本敏感:海量数据存储带来的成本问题。如何以更低成本存储数据,将成为时序数据库需要解决的重中之重。

    常见时序数据库

    时序数据库出现的时间较晚,目前较成熟的时序数据库都仅有2、3年的历史。

    InfluxDB(单机版免费,集群版收费)最成熟,Kairosdb(底层使用Cassandra),OpenTsdb(底层使用HBase),beringei(Facebook开源),TimeScaleDB(底层基于PostgreSQL),TSDB(百度开源),HiTSDB(阿里开源,底层是PostgreSQL)。

     

    时序数据库InfluxDB 性能测试

    CPU内存带宽版本号
    4核16G1Gbit/sUbuntu 4.8.4-2ubuntu1~14.04.3

    写入测试:60万/s

    测试结论:最大的吞吐量为每秒写入60万条数据。这之后,每秒发送的points再多,吞吐量也不会增加,同时CPU利用率已达90%。

    查询测试:600/s

    原文:https://www.yinyubo.cn/www.yinyubo.cn/?p=34

     

     

    CPU : Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz 内存 :12G 硬盘 :SSD 

    mySQL:

    写入速度: 24228 / s
    读取速度: 2261 / s

    InfluxDB:

    写入速度: 68318 / s
    读取速度: 42918 / s

    原文:https://my.oschina.net/u/3579120/blog/1532740

     

    为什么时序数据库更快

     

     

     

    展开全文
  • InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据, 它还是没有额外依赖的开源时序数据库,用于记录 metrics、events...
  • 时序数据库入门

    千次阅读 2019-03-30 23:13:13
    数据库的模型包含关系、key-value 、Document 等很多种,那么为什么新型的时序数据库成为监控数据存储的新宠呢? 下面就会从 为什么需要时序数据库时序数据库的数据结构 两个方面来介绍一下时序数据库。 ...
  • 时序数据库介绍

    2019-10-23 11:00:24
    什么是时序列数据库(Time series database)? 一听到时序列数据库,如果只是稍有耳闻的人,可能立刻会联想到运维和监控系统。 没错,确实是很多运维、监控系统都采用了TSDB作为数据库系统来存储海量的、严格按...
  • 十分钟看懂时序数据库(I)-存储

    千次阅读 2019-04-19 15:10:14
    2017年时序数据库忽然火了起来。开年2月Facebook开源了beringei时序数据库;到了4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了,而早在2016年7月,百度云在其天工物联网平台上发布了国内首个多租户的分布式...
  • MongoDB作为NOSQL N0.1也作为数据库业界不可缺少的一员,最新的5.0已经可以开始使用了. 不过最近时序数据库可不怎么太平, 时序数据库在机器学习,AI学校, 以及...
  • 思极有容时序数据库正是普华公司面对这一高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,它不依赖任何第三方软件,也不是优化或包装了一个开源的数据库或流式计算产品,而是在吸取众多传统关系...
  • 时序数据库分析

    千次阅读 2017-10-25 09:06:07
    本文会从时序数据库的基本概念、使用场景、解决的问题一一展开,最后会从如何解决时序数据存储这一技术问题入手进行深入分析。 1. 背景 百度无人车在运行时需要监控各种状态,包括坐标,速度,方向,温度,...
  • 时序数据库学习笔记

    千次阅读 2018-05-15 20:34:36
    1-时序数据库有多少种类型 DB-Engines: https://db-engines.com/en/ranking/time+series+dbms Graphite vs. InfluxDB vs. Kdb+ vs. OpenTSDB vs. RRDtool ...
  • 该项目作为Elasticsearch用于时序数据库用途的demo,核心是使用ES模板来快速生成分片索引,查询时借助索引别名完成分片的聚合查询,本例按月进行分片,例如my_index_test_2021-6 环境 ES集群(7.1.1): node1:192....
  • “ 你应该敬畏时间 , 因为那是一切的密码。——电影《星际穿越》”近日,UCloud新发布了一款时间序列数据库UTSDB (UCloud TimeSeries Database) ,此次...
  • 时序数据库(TSDB)

    万次阅读 2019-03-11 20:56:39
    时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据。随着5G技术的不断成熟,物联网技术将会使得万物互联。物联网时代之前只有手机、电脑可以联网,以后所有设备都会联网,这些设备每时每刻都会吐出...
  • 即可完成图形化界面的下载 influxDB studio如何使用: 其中的database可以不输入,如果输入了就只能操作指定的数据库 influxDB 如何:修改数据库级别,做到只保留最热的数据,只保留最近的秒级数据 在装有influxDB的...
  • 明明我们就有很多方法来处理时序数据,例如在SQL数据库中通过时间列的排序来解决或者是选择Cassandra这样的分布式数据库。但是,这些方法虽然能够解决时序数据的问题,但是却需要进行大量的工作,十分耗时。那么怎么...
  • 时序数据库与传统数据库的优势

    千次阅读 2021-05-14 17:08:36
    传统关系型数据库存储时序数据的问题 有了时序数据后,该存储在哪里呢?首先我们看下传统的关系型数据库解决方案在存储时序数据时会遇到什么问题。 很多人可能认为在传统关系型数据库上加上时间戳一列就能作为时序...
  • 1.基础1.1 时序数据的定义什么是时间序列数据(Time Series Data,TSD,以下简称时序)从定义上来说,就是一串按时间维度索引的数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的...
  • 时间序列数据库简称时序数据库(Time Series Database),用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。 时序数据的几个特点 1. 基本上都是插入,没有更新的...
  • 安装依赖包:influxdb from influxdb import InfluxDBClient client = InfluxDBClient(‘localhost’, 8086, ‘root’, ‘’, ‘’) client = InfluxDBClient(host, port...操作数据库 显示已存在的所有数据库 使用g...
  • 时序数据库调研报告

    2021-04-09 18:07:31
    一、时序数据库应用场景简介 时间序列数据库简称时序数据库(Time Series Database),用于处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。 时序数据的几个特点 基本...
  • 实时数据库时序数据库

    千次阅读 多人点赞 2020-11-18 10:40:39
    在工业大数据数据库存储领域,除了传统的关系型数据库和分布式数据库以外,还有一种类型的数据库是非常常用,而且是非常有必要的,就是实时数据库,以及时序数据库。 但是,大家可能会有疑问,都是专门处理时序数据...
  • 时序数据库

    千次阅读 2019-06-06 14:29:43
    时序数据库(Time Series Database)是用于存储和管理时间序列数据的专业化数据库,为时间序列数据提供高性能读写和强计算能力的分布式云端数据库服务。时序数据库特别适用于物联网设备监控和互联网业务监控场景。 ...
  • 时序数据库(选摘)

    2017-12-22 14:03:30
    十分钟看懂时序数据库(I)-存储 十分钟看懂时序数据库(III)- 压缩 十分钟看懂时序数据库(IV)- 分级存储 十分钟看懂时序数据库(V)- 分布式计算 时序数据库技术体系(一) 时序数据库技术体系(二)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,174
精华内容 6,869
关键字:

时序型数据库

友情链接: 32-bit MIPS.zip