java - Influxdb写入性能太慢

标签 java influxdb

我正在使用java写入influxDB。

假设influxDB实例已连接数据库。下面是我的代码。

influxDB.enableBatch(500, 100, TimeUnit.MICROSECONDS);
   while (true) {
            try {
        Point point = Point.measurement("cpu").addField("idle", (Math.random()*1000)).build();
        influxDB.write(dbName, "default", point);
                } catch (RuntimeException e) {
            System.out.println(e.getMessage());
    }
    }

通过使用这种逻辑,我每秒只能写入 300 条记录,这比我们预期的要少得多。每秒 2000 次写入就足够了。想知道我应该优化哪些参数?

最佳答案

influxDB.enableBatch(500, 100, TimeUnit.MICROSECONDS);

意味着您每 500 点或至少每 100 毫秒刷新一次。既然你说你每秒写入 300 点,我假设你根本不会在一秒钟内生成更多点来写入 influxdb。

我认为“减慢”点创建的部分是 Math.random()。因此,尝试使用固定值并检查您现在是否在一秒钟内获得更多分数。

像您尝试做的性能测试的一个很好的来源是 influxdb-java github 。取自PerformanceTests.java有一个测试与您正在进行的测试非常相同:

@Test(threadPoolSize = 10, enabled = false)
public void writeSinglePointPerformance() throws InterruptedException {
    String dbName = "write_" + System.currentTimeMillis();
    this.influxDB.createDatabase(dbName);
    this.influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS);
    String rp = TestUtils.defaultRetentionPolicy(this.influxDB.version());
    Stopwatch watch = Stopwatch.createStarted();
    for (int j = 0; j < SINGLE_POINT_COUNT; j++) {
        Point point = Point.measurement("cpu")
                .addField("idle", (double) j)
                .addField("user", 2.0 * j)
                .addField("system", 3.0 * j).build();
        this.influxDB.write(dbName, rp, point);
    }
    this.influxDB.disableBatch();
    System.out.println("Single Point Write for " + SINGLE_POINT_COUNT + " writes of  Points took:" + watch);
    this.influxDB.deleteDatabase(dbName);
}

关于java - Influxdb写入性能太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735566/

相关文章:

spark-streaming - 时间序列数据库与流分析引擎(如 Spark Streaming)之间的区别

grafana - 如何动态地将值从警报条件/查询条件传递到我的通知?

java - 使用 Java 将 Excel (.xlsx) 转换为 PDF

influxdb - 我可以为 influxdb 中的不同测量创建不同的保留策略吗?

influxdb - 当 select count 没有结果时返回 0 而不是 N/A (null)

influxdb - InfluxDb 中的系列和桶是什么

java - 使用单例创建监听器对象不起作用

java - 设计一个循环调用函数的程序

java - Java 11 上 ShellFolder.getShellFolder() 的替换或使用方式

java - Spring 启动: MySQLNonTransientConnectionException: Could not create connection