Influxdb写性能太慢
Influx DB write performance is too slow
我正在使用 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。
我认为您 "slows" 创建您的观点的部分是 Math.random()
。所以尝试使用固定值并检查您现在是否在一秒钟内获得更多积分。
在 influxdb-java github. Taken from 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。
假设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。
我认为您 "slows" 创建您的观点的部分是 Math.random()
。所以尝试使用固定值并检查您现在是否在一秒钟内获得更多积分。
在 influxdb-java github. Taken from 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);
}