Node-Influx 客户端库入门
作者:Margo Schaedel / 产品, 用例, 开发者, 入门
2018 年 4 月 17 日
导航至
如有疑问,请从头开始——这句格言适用于任何学习之旅,包括开始使用 node-influx 客户端库。让我们看看 InfluxDB 客户端库,特别是 node-influx,一个适用于 JavaScript 用户的 InfluxDB 客户端。此客户端库具有一个简单的 API,用于大多数 InfluxDB 操作,并在 Node 和浏览器中完全受支持,所有这些都无需任何额外的依赖项。
有一个很棒的在线 教程 适用于 node-influx 库,以及一些方便的 文档,我建议您事先通读一下。在这里,我们将仅介绍一些基础知识。
您需要的准备
在本教程中,我将运行 InfluxDB 的本地安装;您可以学习如何 在此处 启动并运行它。您还需要安装 Node。如果 Node.js 不是您的菜,还有很多其他的 客户端库 可供使用,以及一些关于将 InfluxDB 与其他语言一起使用的指南,例如这些关于 Python 和 Ruby 的帖子。
设置场景
让我们想象一下,您对冲浪有一种莫名的热爱。您发现自己身处夏威夷,追随 杜克 的脚步,并试图找到最佳冲浪地点。以及在上述惊人地点冲浪的最佳时间。查看潮汐是有道理的,对吧?嗯,根据我们可靠的朋友 维基百科,海洋潮汐是时间序列数据的一个很好的例子。它们随着时间涨落(是的,我知道我在这里说得有点过了)。因此,让我们练习使用 node-influx 库将一些示例潮汐数据放入 InfluxDB,看看会发生什么。
首先,我们需要在将要使用的应用程序文件夹中安装 node-influx 库。
$ npm install --save influx
这会将 node-influx 库添加到我们的 node_modules 中;我们还需要像这样将库引入到我们的服务器文件中
const Influx = require('influx');
我们将使用以下 构造函数 连接到单个 InfluxDB 实例并指定我们的连接选项。
const influx = new Influx.InfluxDB({
host: 'localhost',
database: 'ocean_tides',
schema: [
{
measurement: 'tide',
fields: { height: Influx.FieldType.FLOAT },
tags: ['unit', 'location']
}
]
});
这里有几个不同的选项可用
- 您可以通过将 DSN 作为字符串传递到构造函数参数中来连接到单个主机,如下所示
const influx = new Influx.InfluxDB('http://user:password@host:8086/database')
- 您也可以传入一整套配置详细信息,并指定属性,如用户名、密码、数据库、主机、端口和模式 - 这就是我们上面所做的。
- 如果您有多个 Influx 节点要连接,您可以传入集群配置。例如
const client = new InfluxDB({ database: 'my_database', username: 'duke_kahanamoku', password: 'aloha', hosts: [ { host: 'db1.example.com' }, { host: 'db2.example.com' }, ] schema: [ { measurement: 'tide', fields: { height: Influx.FieldType.FLOAT }, tags: ['unit', 'location'] } ] })
值得在此处注意的是,在您的模式设计中,您将需要使用 Influx.FieldType 为您的字段值指定 FieldType - 它们可以是字符串、整数、浮点数或布尔值。
检查数据库
我们可以使用 influx.getDatabaseNames() 首先检查我们的数据库是否已存在。如果不存在,我们可以使用 influx.createDatabase() 创建我们的数据库。请参见下文
influx.getDatabaseNames()
.then(names => {
if (!names.includes('ocean_tides')) {
return influx.createDatabase('ocean_tides');
}
})
.then(() => {
app.listen(app.get('port'), () => {
console.log(`Listening on ${app.get('port')}.`);
});
writeDataToInflux(hanalei);
writeDataToInflux(hilo);
writeDataToInflux(honolulu);
writeDataToInflux(kahului);
})
.catch(error => console.log({ error }));
我们首先从我们连接的 Influx 实例中获取所有可用的数据库,然后循环遍历返回的数组,看看是否有任何名称与“ocean_tides”匹配。如果没有,那么我们创建一个具有该名称的新数据库。来自该数据库的回调然后将我们的数据写入数据库。
将数据写入 InfluxDB
使用 influx.writePoints(),我们可以将我们的数据点写入数据库。
influx.writePoints([
{
measurement: 'tide',
tags: {
unit: locationObj.rawtide.tideInfo[0].units,
location: locationObj.rawtide.tideInfo[0].tideSite,
},
fields: { height: tidePoint.height },
timestamp: tidePoint.epoch,
}
], {
database: 'ocean_tides',
precision: 's',
})
.catch(error => {
console.error(`Error saving data to InfluxDB! ${err.stack}`)
});
为了保持简单,我只拉入了一些示例数据文件,然后按位置循环遍历它们,并将每个数据点写入 measurement 名称 tide
下的 InfluxDB,并带有 location
和 unit
标签(均为字符串)。这里只有一个字段,height
,我也发送了一个 timestamp
,虽然这不是技术上必需的(但它更准确)。您可以指定其他选项,例如要写入的数据库、时间精度和保留策略。
查询数据库
我们已经学习了如何将数据写入数据库;现在我们需要知道如何查询该数据。这很简单 - 我们可以使用 influx.query() 并传入我们的 InfluxQL 语句来检索我们想要的数据。
influx.query(`
select * from tide
where location =~ /(?i)(${place})/
`)
.then( result => response.status(200).json(result) )
.catch( error => response.status(500).json({ error }) );
在这里,我们正在查询数据库中来自 measurement tide
的任何数据,其中 location 包含传入的地点名称(使用正则表达式)。如果您存储了大量数据,最好也将您的查询限制在一定的时间跨度内。您还可以将 options 对象(数据库、保留策略和时间精度)传递给 influx.query()
方法。
结论
这涵盖了 node-influx 客户端库的所有基础知识。请浏览一下 文档,并告诉我们您还想了解哪些其他用例!我还将所有这些代码发布在 GitHub 上的存储库 中,如果您想亲自尝试一下。有问题和意见?请在 Twitter 上联系我们:@mschae16 或 @influxDB。现在出发,找到那个巨浪,冲浪起来!