如何在Influxdb中写入(nodejs)具有相同时间戳的多个点?

时间:2016-06-28 00:42:37

标签: javascript node.js influxdb

在我的nodejs应用程序中,我使用influxdb(时间序列数据库)来保存我的日志数据。我使用node-influx在Influxdb中写入点。但就我而言,有多个日志数据具有相同的时间戳。在这种情况下,只有最后一个数据保存在数据库中。

我调试了脚本并发现javascript日期只包含毫秒因此在我的情况下,多个数据具有相同的时间戳,因为它们在微秒上变化。所以我需要一个Date格式,它给我当前的日期时间,以微秒为单位。或者有没有正确的方法在Influxdb中写入具有相同时间戳的多个点?

2 个答案:

答案 0 :(得分:3)

Influxdb设计为当条件(时间戳,度量,标签)相同时只保留一个点, 所以你可以 以两种不同的方式实现这一目标:

  1. 通过js中的不同时间戳插入点 微秒(stackoverflow

  2. 添加multi时尝试使用不同的标记 具有相同时间戳(influxdata_writing_data)的点,例如

    api_info,tag = tag1 elapse = 0.234 1467085047286(时间戳是可选的)
     api_info,tag = tag2 elapse = 0.478 1467085047286(时间戳是可选的)

答案 1 :(得分:0)

根据InfluxDB documentation,点数据时间戳可以像 纳秒 一样精细。

  

使用HTTP API编写数据

  HTTP API是将数据放入InfluxDB的主要方法。至   写入数据向/ write端点发送POST请求。这个例子   下面将单个点写入mydb数据库。数据包括   测量cpu_load_short,标记键主机和区域   标记值server01和us-west,带字段的字段键值   值为0.64,时间戳为1434055562000000000。

注意timestamp 1434055562000000000

对于使用npm node-influx模块以纳秒为单位的写入点,您可以将精度设置为“ns”(纳秒)。也就是precision: 'ns'。要通过涌入节点模块写入点,它不需要您拥有日期对象,因此如果您知道自纪元以来的确切日期时间戳值,则可以将其作为64位整数值传入,以便将其写入涌入。 / p>

请参阅此处的示例代码。

var influx = require('influx');

var databaseWriter = influx({
    host: 'XXX',
    port: 'XXX',
    protocol: 'XXX',
    username: 'XXX',
    password: 'XXX',
    database: 'XXX'
});

this.databaseWriter.writePoints(
    'influx_stackoverflow_solution',
    [
        // point #1
        [
            {
                "value": 999,
                "time" : 1422568543702900257
            },
            {
                'tag1' : 'value_in_nanoseconds'
            }
        ],
        // point #2
        [
            {
                "value": 8888,
                "time" : 1422568543702900600
            },
            {
                'tag1' : 'value_in_nanoseconds'
            }
        ]
    ],
    { precision: 'ns' },
    function(errmsg, returnValue) {
        if (errmsg) return callback(new Error(errmsg));
        callback(null, returnValue);
    }
);

<强>输出:
enter image description here