InfluxDB v0.9.0-rc4 发布,现已支持标签和更多特性

导航至

经过数月的辛勤工作,我们非常激动地宣布 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
      }
    }
  ]
}

我们有 hostregion 的标签键,并且我们正在写入一个名为 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 不仅仅是一个时间序列数据库,还是一个用于时间序列发现的数据库。这是我们解决处理成千上万甚至数百万个时间序列问题的方案。

在 Twitter 上告诉您的朋友关于我们的新 API

连续查询

以前,连续查询不适用于滞后数据。您也只能在时间窗口过去后才能获得结果,因此您看不到增量结果。现在,您可以通过配置选项让 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 中写入和查询数据以帮助您入门。请告诉我们它的外观如何并广而告之!

在 Twitter 上告诉您的朋友关于我们的新 API