InfluxDB v0.9.0-rc4 发布,现已支持标签和更多特性
作者:Paul Dix / 产品
2015 年 2 月 24 日
导航至
经过数月的辛勤工作,我们非常激动地宣布 InfluxDB v0.9.0 的第一个早期测试版本 0.9.0-rc4(最新版本在此)发布。有关 0.9.0 版本的详细信息,请参阅 更新日志,但这值得一篇更长的文章。我们添加了一些主要的新功能,例如支持标签,并进行了破坏性的 API 更改。新的 API 应该反映今年晚些时候 InfluxDB 1.0 版本的样子。可能会有新增功能,但在 0.9.0 版本发布后,我们不太可能进行任何破坏性的 API 更改。请继续阅读,快速预览一些新功能,并详细了解在完成完整的 0.9.0 版本发布之前,TODO 列表中还有哪些内容。
标签和新的查询 API
此版本中最大的功能是添加了标签。InfluxDB 中的数据现在按数据库、指标 (measurements)、标签和字段进行组织。指标和标签集的组合代表一个唯一的序列。例如,如果我们有以下写入的点:
cpu region=uswest host=serverA 23.2
cpu region=uswest host=serverB 25.1
在本例中,第一部分是指标名称 cpu
,后跟标签(键值对),然后是值。在 JSON 中,我们可以这样写:
{
"database" : "foo",
"retentionPolicy" : "bar",
"points": [
{
"name": "cpu",
"tags": {
"host": "serverA",
"region": "uswest"
},
"timestamp": "2009-11-10T23:00:00Z",
"fields": {
"value": 23.2
}
},
{
"name": "cpu",
"tags": {
"host": "serverB",
"region": "uswest"
},
"timestamp": "2009-11-10T23:00:00Z",
"fields": {
"value": 25.1
}
}
]
}
我们有 host
和 region
的标签键,并且我们正在写入一个名为 value
的字段。指标、标签和字段在您写入数据时定义。数据库和保留策略必须提前创建。字段在指标上定义。一旦字段被写入指标内的数据点,其类型就会被设置。您可以拥有多个字段,类型可以是 float64、bool 或 string(很快将支持 bytes 和 int64)。
通过添加标签,这样的查询速度非常快:
SELECT * from cpu where host = 'serverA'
不再需要在名称中编码元数据,现在您可以使用标签。我们还添加了许多新的查询语法来获取标签和元数据。以下是一些示例查询,展示了部分可能性:
-- get a single series of the mean of cpu across a region
-- this merges all the individual series on the fly
SELECT mean(value) FROM cpu
WHERE region = 'uswest'
AND time > now() - 4h
GROUP BY time(5m)
-- get a series for each region of the mean of cpu across that region
-- this merges all the individual series of each region on the fly
SELECT mean(value) FROM cpu
WHERE time > now() - 4h
GROUP BY time(5m), region
-- get every series from the region (i.e don't merge)
SELECT mean(value) FROM cpu
WHERE region = 'uswest'
AND time > now() - 1h
GROUP BY time(60s), *
-- get a series for cpu for everything matching the where clause
SELECT mean(value) FROM cpu
WHERE region = 'uswest'
AND app = 'paulapp'
AND time > now() - 4h
GROUP BY time(5m)
-- get the second 10 series from the region
SELECT mean(value) FROM cpu
WHERE region = 'uswest'
AND time > now() - 4h
GROUP BY time(5m), *
LIMIT 10
OFFSET 10
-- get the second 10 series from the region
SELECT mean(value) FROM cpu
WHERE app =~ '.*someapp.*'
AND time > now() - 4h
GROUP BY time(5m), *
LIMIT 10
OFFSET 10
-- query against the time as an RFC3339Nano
SELECT * from cpu
WHERE time >= "2015-02-24T00:00:00Z"
AND time < "2015-02-25T00:00:00Z"
-- query against the time as an epoch
SELECT * from cpu
WHERE time > 1424823603s
AND time < 1424823663s
-- query the data from a retention policy other than the default
SELECT * from "6 months".cpu
WHERE time > "2015-02-24T00:00:00Z"
-- show all databases in the server
SHOW DATABASES
-- show all measurements in the passed in database
SHOW MEASUREMENTS
-- find out what measurements we're taking for redis
SHOW MEASUREMENTS WHERE service = 'redis'
-- show measurements against a regex
SHOW MEASUREMENTS where app =~ '.*paulapp.*'
-- show series (unique tag sets) on the cpu measurement
SHOW SERIES FROM cpu
-- show series from cpu for a given host
SHOW SERIES FROM cpu WHERE host = 'serverA'
SHOW SERIES FROM cpu WHERE host = 'serverA' OR host = 'serverB'
-- show all measurements and their series for a given host
SHOW SERIES WHERE host = 'serverA'
-- show what tag keys we have
SHOW TAG KEYS
-- show what tag keys we have for a given measurement
SHOW TAG KEYS FROM cpu
-- show the tag values for a given key across all measurements
SHOW TAG VALUES WITH KEY = host
-- show the tag values for a given measurement and tag key
SHOW TAG VALUES FROM cpu WITH KEY = host
-- drop a series by id
DROP SERIES 1
-- drop all series matching a where clause
DROP SERIES WHERE host = 'serverA'
-- drop all series from cpu matching a where clause
DROP SERIES from cpu WHERE region = 'uswest'
-- drop an entire measurement (coming soon)
DROP MEASUREMENT cpu
-- drop a database
DROP DATABASE mydb
这些新功能的结合使 InfluxDB 不仅仅是一个时间序列数据库,还是一个用于时间序列发现的数据库。这是我们解决处理成千上万甚至数百万个时间序列问题的方案。
连续查询
以前,连续查询不适用于滞后数据。您也只能在时间窗口过去后才能获得结果,因此您看不到增量结果。现在,您可以通过配置选项让 CQ 为每个时间窗口运行多次,从而为您提供增量结果并拾取任何滞后的数据。
您可以在 InfluxDB 配置源代码 中找到有关连续查询配置操作工作方式的更多详细信息。我们将在未来几周内更新文档,提供更多信息。
创建连续查询的语法也已更改。您可以在 InfluxQL 语言规范 中找到有关新 CQ 语法的详细信息
集群
在此 RC 版本中,您只能操作保留策略上的复制因子等于集群中服务器数量的集群。此版本主要是为了方便人们启动单台服务器并测试 API 并开始更新库。我们将在几周内完成完整的集群支持。文档中有一点关于 新的集群模型 的介绍。
Grafana
Grafana,每个人最喜欢的仪表板工具,需要更新才能与新版本配合使用。好消息是我们已经在这方面做了一些工作,您可以在我们的 Grafana 分支 中找到它。我们将在未来几周内与 Grafana 团队合作,使其更新以支持 InfluxDB 0.9.0。
纯 Go 实现
InfluxDB v0.9.0 完全用 Go 编写。不再有任何基于 C 或 C++ 的构建依赖项。这意味着为 Go 支持的任何平台构建项目应该非常简单。Windows 和 ARM 用户欢呼吧!我们尚未发布这些平台的构建版本,但如果有人有兴趣提供帮助,如果您想构建它们,我们很乐意提供。
为了实现此目标,我们将底层存储引擎更改为 BoltDB,这是一个纯 Go COW B+Tree 实现。我们还用纯 Go 编写了查询语言解析器。我们认为结果是 更容易理解和更新的代码。
走向正式发布
此版本不适用于生产环境。我们还有一些事情要做,我们甚至还没有开始关注性能。通过此构建版本,我们希望获得有关 API 的反馈,并开始在社区中进行更广泛的测试。以下是我们仍然需要完成的一些重要事项的快速列表:
- 热数据库备份
- 节点替换
- 将分片从一台服务器移动到另一台服务器
- 分发查询(框架已就位)
- 仅充当数据节点的节点
- 截断 Broker 节点上的主题日志(它们目前无限增长)
- 实现扇出连续查询
- 缺少功能/特性?
- 测试,测试,测试!
最佳查看位置是 waffle.io/influxdb/influxdb。在 Ready 列及其右侧的所有内容都是我们正在努力完成 0.9.0 版本的 issue。
如果您有想要的功能或遇到的问题,请先 搜索 issue。如果您在那里找不到,请在 InfluxDB Google Group 上发起讨论。
文档
我们仍在努力更新文档,但您可以在 InfluxDB 0.9.0 入门指南 中找到更多信息。InfluxQL 语言规范 是另一个很好的信息来源。
最后,我们编写了一个测试脚本,演示了 在 InfluxDB 中写入和查询数据以帮助您入门。请告诉我们它的外观如何并广而告之!