我对InfluxDB中的保留政策和持续时间有疑问。 我正在使用InfluxDB来编写时间数据。 数据应该是从groovy中的某个文本文件中获取的,所以我使用了以下驱动程序来使用Influx DB 0.9.4:
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.0</version>
</dependency>
现在我可以插入数据(我正在使用BatchPoints):
BatchPoints batchPoints = BatchPoints
.database(dbName)
.tag("async", "true")
.retentionPolicy("default")
.consistency(InfluxDB.ConsistencyLevel.ALL)
.build()
List<Point> points = obtainAllMyMeasurementsHere()
points.each {p ->
batchPoints.point(p)
}
influxClient.write(batchPoints)
到目前为止一直很好,但现在我想在1周之后自动删除我的积分。
据我所知,我需要使用保留策略和持续时间,但我无法理解java中的确切位置。看起来流入数据库的java驱动程序的所有示例/测试都使用“默认”保留策略。
有人可以提供代码片段,我应该如何从Java Driver创建保留策略?有可能吗?
由于
答案 0 :(得分:1)
使用查询创建保留策略如果JavaDriver可以提交查询,只需阅读RP creation并发送正确的查询。您也可以通过CLI或curl
直接向InfluxDB提交查询。
答案 1 :(得分:0)
Influxdb java驱动程序没有用于创建保留策略规则的特殊API。 相反,我们应该使用常规的 org.influxdb.dto.Query ,可能会略微冗余的语法(数据库名称在查询创建代码中出现两次,见下文)。
算法是:
String RETENTION_POLICY = "samplepolicy"
String dbName = "sampledb"
long ttl = 60 * 60 * 24 // one day ttl
Query createRetentionPolicyQuery = new Query("CREATE RETENTION POLICY $RETENTION_POLICY ON $dbName DURATION ${ttl}s REPLICATION 1 DEFAULT", dbName)
// create the policy:
InfluxDB influxClient = createClient(...) // omitted for brevity
QueryResult result = influxClient.query(createRetentionPolicyQuery)
if(result.error != null) {
throw new RuntimeException("Failed to create a retention policy on database $dbName. Reason: ${result.error}")
}
BatchPoints batchPoints = BatchPoints
.database(dbName)
.tag("async", "true")
.retentionPolicy(RETENTION_POLICY)
.consistency(InfluxDB.ConsistencyLevel.ALL)
.build()