influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回…

influx测试——单条读性能很差,大约400条/s,批量写性能很高,7万条/s,总体说来适合IOT数据批量存,根据tag查和过滤场景,按照时间顺序返回…

大家好,又见面了,我是全栈君。

测试准备

需要将InfluxDB的源码放入 go/src/github.com/influxdata 目录

单写测试代码(write1.go):

package main

import (
    "log"
    "time"
    "fmt"
    "math/rand"
    "github.com/influxdata/influxdb/client/v2"
)

const (
    MyDB = "testInfluxdb"
    username = "root"
    password = ""
)

func queryDB(clnt client.Client, cmd string) (res []client.Result, err error) {
    q := client.Query{
        Command:  cmd,
        Database: MyDB,
    }
    if response, err := clnt.Query(q); err == nil {
        if response.Error() != nil {
            return res, response.Error()
        }
        res = response.Results
    } else {
        return res, err
    }
    return res, nil
}

func writePoints(clnt client.Client,num int) {
    sampleSize := 1 * 10000
    rand.Seed(42)
    t := num
    bp, _ := client.NewBatchPoints(client.BatchPointsConfig{
        Database:  MyDB,
        Precision: "us",
    })

    for i := 0; i < sampleSize; i++ {
        t += 1
        tags := map[string]string{
            "system_name": fmt.Sprintf("sys_%d",i%10),
            "site_name":fmt.Sprintf("s_%d", (t+i) % 10),
            "equipment_name":fmt.Sprintf("e_%d",t % 10),
        }
        fields := map[string]interface{}{
            "value" : fmt.Sprintf("%d",rand.Int()),
        }
        pt, err := client.NewPoint("monitorStatus", tags, fields,time.Now())
        if err != nil {
            log.Fatalln("Error: ", err)
        }
        bp.AddPoint(pt)
    }

    err := clnt.Write(bp)
    if err != nil {
        log.Fatal(err)
    }

    //fmt.Printf("%d task done\n",num)
}

func main() {
    // Make client
    c, err := client.NewHTTPClient(client.HTTPConfig{
        Addr: "http://localhost:8086",
        Username: username,
        Password: password,
    })

    if err != nil {
        log.Fatalln("Error: ", err)
    }
    _, err = queryDB(c, fmt.Sprintf("CREATE DATABASE %s", MyDB))
    if err != nil {
        log.Fatal(err)
    }

    i := 1
    for i <= 10000 {
        defer writePoints(c,i)
        //fmt.Printf("i=%d\n",i)
        i += 1
    }
    //fmt.Printf("task done : i=%d \n",i)

}

 

单机读:

package main

import (
    "log"
    //"time"
    "fmt"
    //"math/rand"
    "github.com/influxdata/influxdb/client/v2"
)

const (
    MyDB = "testInfluxdb"
    username = "root"
    password = ""
)

func queryDB(clnt client.Client, cmd string) (res []client.Result, err error) {
    q := client.Query{
        Command:  cmd,
        Database: MyDB,
    }
    if response, err := clnt.Query(q); err == nil {
        if response.Error() != nil {
            return res, response.Error()
        }
        res = response.Results
    } else {
        return res, err
    }
    return res, nil
}

func main() {
    // Make client
    c, err := client.NewHTTPClient(client.HTTPConfig{
        Addr: "http://localhost:8086",
        Username: username,
        Password: password,
    })

    if err != nil {
        log.Fatalln("Error: ", err)
    }
    q := fmt.Sprintf("select * from monitorStatus where system_name='sys_5' and site_name='s_1' and equipment_name='e_6' order by time desc limit 10000 ;")
    res, err2 := queryDB(c, q)
    if err2 != nil {
        log.Fatal(err)
    }
    count := len(res[0].Series[0].Values)
    log.Printf("Found a total of %v records\n", count)

}

代码摘自:http://www.cnblogs.com/MikeZhang/p/InfluxDBTest20170212.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108515.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux dhcp服务器搭建_如何自己搭建服务器

    linux dhcp服务器搭建_如何自己搭建服务器本篇是关于在Linux服务器上安装并配置DHCP服务器的配置教程!

    2022年10月25日
  • Ubuntu apt-get彻底卸载软件包

    Ubuntu apt-get彻底卸载软件包如果你关注搜索到这篇文章,那么我可以合理怀疑你被apt-get的几个卸载命令有点搞晕了。apt-get的卸载相关的命令有remove/purge/autoremove/clean/autoclean等。具体来说:apt-getpurge/apt-get–purgeremove删除已安装包(不保留配置文件)。如软件包a,依赖软件包b,则执行该命令会删除a,而且不保留配置文…

  • QCustomPlot配置[通俗易懂]

    QCustomPlot配置[通俗易懂]安装在https://www.qcustomplot.com/index.php/download下载压缩包。qcustomplot.h和qcustomplot.cpp即为需要使用的文件。然后自己新建一个QWidget,要么继承自QCustomPlot这个类,要么做提升。备注笔者使用环境是Windows7.编译器是VistualStudio2015(构建套件是vs2013)部分类说明QCPGraph图表通过调用QCPGraph的setData设置绘图需要的数据添加一.

  • 渝粤锂电一体机800A_渝粤锂电池怎么样

    渝粤锂电一体机800A_渝粤锂电池怎么样选择题题目:英国经济学家罗宾斯的著名论文《轮经济科学的性质和意义》发表于()题目:亚当˙斯密的《国富论》发表于()题目:西方经济学产生的根本原因是()题目:西方主流经济学家主要采用下列哪种方法论来进行经济学研究()题目:微观行为与宏观结果甚至可能是背离的。对此,萨缪尔森在他经典的教科书上曾打过一个精辟的比方。他说,好比在一个电影院看电影,有人被前面的人挡住了视线,如果他站起来的话,他看电影的效果将会改善。因此,站起来就微观而言是合理的。但是,如果大家都站起来的话,则大家看电影的效果都不能

    2022年10月23日
  • 【风马一族_代码英语】代码英语之一

    【风马一族_代码英语】代码英语之一

  • Ubuntu 18.04 固定 NFS 端口

    Ubuntu 18.04 固定 NFS 端口NFS本身是没有提供信息传输的协议和功能的,它使用的是RPC(RemoteProcedureCall)协议。通过rpcinfo命令可以查看NFS相关的端口:linux@linux-virtual-machine:~$rpcinfo-plocalhostprogramversprotoportservice1000004tcp111portmapper1000003tcp111portmapp

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号