【问题标题】:How to write(nodejs) multiple points having same timestamp in influxdb?如何在influxdb中写入(nodejs)具有相同时间戳的多个点?
【发布时间】:2016-06-28 00:42:36
【问题描述】:

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

我调试了脚本,发现 javascript 日期只包含毫秒所以在我的例子中,多个数据具有相同的时间戳,因为它们以微秒为单位变化。所以我需要一个日期格式,它给我当前的日期时间,以微秒为单位。或者有什么合适的方法可以在 influxdb 中写入多个具有相同时间戳的点?

【问题讨论】:

    标签: javascript node.js influxdb


    【解决方案1】:

    Influxdb 设计为在条件(时间戳、测量、标签)相同时仅保存一个点, 这样你就可以 以两种不同的方式完成此任务:

    1. 在 js 中按不同的时间戳插入点 微秒(stackoverflow)

    2. 添加多时尝试使用不同的标签 时间戳相同的点(influxdata_writing_data),如

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

    【讨论】:

      【解决方案2】:

      根据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'。要通过 influx 节点模块写入点,它不需要您拥有日期对象,因此如果您知道自纪元以来的确切日期时间戳值,您可以将其作为 64 位整数值传入以将其写入 influx。

      在此处查看示例代码。

      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);
          }
      );
      

      输出:

      【讨论】:

      • 如何以纳秒获取当前日期时间?
      • 据我所知,Javascript 的日期时间对象最多只支持毫秒。因此这是不可能的。在您的帖子中,您提到您获得的数据在微秒之间变化,所以我假设您已经知道该点的日期时间戳。那是对的吗?愿意分享您在此处记录的数据类型吗?
      • 我无法获得微秒。这就是为什么我正在寻找将它们写入大量涌入的任何选项。
      • 那么你怎么知道你的数据是用微秒来区分的呢?此外,查看@TommyLike 的解决方案,标签elapse 要求您具有实际的微秒微分值以使每个点唯一。那你是如何计算价值的呢?
      • 即使显示相同的时间戳,我也需要保存数据。所以我采取了@TommyLike 的第二个选项。创建唯一标签可以解决我的问题。但是,如果有任何选项可以为我提供纳秒的当前日期时间,那就更好了。
      猜你喜欢
      • 2019-07-15
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2014-11-28
      相关资源
      最近更新 更多