MYSQL有时序数据库的用法_分布式时序数据库InfluxDB

InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

它有三大特性:

1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)

2. Metrics(度量):你可以实时对大量数据进行计算

3. Eevents(事件):它支持任意的事件数据

c51e70553d7c7b924d52a0fa8a14837c.png

特点

schemaless(无结构),可以是任意数量的列

Scalable

min, max, sum, count, mean, median 一系列函数,方便统计

Native HTTP API, 内置http支持,使用http读写

Powerful Query Language 类似sql

Built-in Explorer 自带管理工具

管理界面:

288a98b79f7fc50dde1f75fa98871e5a.png

API

InfluxDB 支持两种api方式

HTTP API

Protobuf API

Protobuf 还未开发完成, 官网文档都没有

如何使用 http api 进行操作?

比如对于foo_production这个数据库,插入一系列数据,可以发现POST 请求到 /db/foo_production/series?u=some_user&p=some_password, 数据放到body里。

数据看起来是这样的:

下面的"name": "events", 其中"events"就是一个series,类似关系型数据库的表table

[

{

"name": "events",

"columns": ["state", "email", "type"],

"points": [

["ny", "paul@influxdb.org", "follow"],

["ny", "todd@influxdb.org", "open"]

]

},

{

"name": "errors",

"columns": ["class", "file", "user", "severity"],

"points": [

["DivideByZero", "example.py", "someguy@influxdb.org", "fatal"]

]

}

]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[

{

"name":"events",

"columns":["state","email","type"],

"points":[

["ny","paul@influxdb.org","follow"],

["ny","todd@influxdb.org","open"]

]

},

{

"name":"errors",

"columns":["class","file","user","severity"],

"points":[

["DivideByZero","example.py","someguy@influxdb.org","fatal"]

]

}

]

格式是json,可以在一个POST请求发送多个 series, 每个 series 里的 points 可以是多个,但索引要和columns对应。

上面的数据里没有包含time 列,InfluxDB会自己加上,不过也可以指定time,比如:

[

{

"name": "response_times",

"columns": ["time", "value"],

"points": [

[1382819388, 234.3],

[1382819389, 120.1],

[1382819380, 340.9]

]

}

]

1

2

3

4

5

6

7

8

9

10

11

[

{

"name":"response_times",

"columns":["time","value"],

"points":[

[1382819388,234.3],

[1382819389,120.1],

[1382819380,340.9]

]

}

]

time 在InfluxDB里是很重要的,毕竟InfluxDB是time series database

在InfluxDB里还有个sequence_number字段是数据库维护的,类似于mysql的 主键概念

InfluxDB 增删更查都是用http api来完成,甚至支持使用正则表达式删除数据,还有计划任务。

比如:

发送POST请求到 /db/:name/scheduled_deletes, body如下,

{

"regex": "stats\..*",

"olderThan": "14d",

"runAt": 3

}

1

2

3

4

5

{

"regex":"stats\..*",

"olderThan":"14d",

"runAt":3

}

这个查询会删除大于14天的数据,并且任何以stats开头的数据,并且每天3:00 AM运行。

查询语言

InfluxDB 提供了类似sql的查询语言

看起来是这样的:

select * from events where state == 'NY';

select * from log_lines where line =~ /error/i;

select * from events where customer_id == 23 and type == 'click';

select * from response_times where value > 500;

select * from events where email !~ /.*gmail.*/;

select * from nagios_checks where status != 0;

select * from events

where (email =~ /.*gmail.* or email =~ /.*yahoo.*/) and state == 'ny';

delete from response_times where time > now() - 1h

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

select *fromeventswherestate=='NY';

select *fromlog_lineswhereline=~/error/i;

select *fromeventswherecustomer_id==23andtype=='click';

select *fromresponse_timeswherevalue>500;

select *fromeventswhereemail!~/.*gmail.*/;

select *fromnagios_checkswherestatus!=0;

select *fromevents

where(email=~/.*gmail.*oremail=~/.*yahoo.*/)andstate=='ny';

deletefromresponse_timeswheretime>now()-1h

非常容易上手, 还支持Group By, Merging Series, Joining Series, 并内置常用统计函数,比如max, min, mean 等

常用语言的库都有,因为api简单,也很容易自己封装。

InfluxdDB作为很多监控软件的后端,这样监控数据就可以直接存储在InfluxDB

StatsD, CollectD, FluentD

还有其它的可视化工具支持InfluxDB, 这样就可以基于InfluxDB很方便的搭建监控平台

InfluxDB 数据可视化工具

InfluxDB 用于存储基于时间的数据,比如监控数据,因为InfluxDB本身提供了Http API,所以可以使用InfluxDB很方便的搭建了个监控数据存储中心。

对于InfluxDB中的数据展示,官方admin有非常简单的图表, 看起来是这样的

d08197753b8502d6f06ef75657bae9f4.png

除了自己写程序展示数据还可以选择:

tasseo

tasseo,为Graphite写的Live dashboard,现在也支持InfluxDB,tasseo 比较简单, 可以配置的选项很少。

92b63c7954b79266d68536b3ebca4abf.png

Grafana

Grafana是一个纯粹的html/js应用,访问InfluxDB时不会有跨域访问的限制。只要配置好数据源为InfluxDB之后就可以,剩下的工作就是配置图表。Grafana 功能非常强大。使用ElasticsSearch保存DashBoard的定义文件,也可以Export出JSON文件(Save ->Advanced->Export Schema),然后上传回它的/app/dashboards目录。

配置数据源:

datasources: {

influx: {

default: true,

type: 'influxdb',

url: 'http://:8086/db/',

username: 'test',

password: 'test',

}

},

1

2

3

4

5

6

7

8

9

datasources:{

influx:{

default:true,

type:'influxdb',

url:'http://:8086/db/',

username:'test',

password:'test',

}

},

2d8bf788077e5e5d070d70977a0f0973.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值