我在InfluxDB中有一个关于保留策略和持续时间的问题。我正在使用InfluxDB编写时间数据。数据应该是从groovy中的某个文本文件中提取的,因此我使用了以下驱动程序来处理流入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)
到目前为止还不错,但是现在我想在一周后自动删除我的观点。
据我所知,我需要使用保留策略和持续时间,但我不知道在java中的确切位置,我指定了这一点。看起来,流入db的java驱动程序的所有示例/测试都使用“默认”保留策略。
那么,有人能提供一个代码片段吗?我应该如何从Java驱动程序中创建一个保留策略?有可能吗?
谢谢
发布于 2015-11-13 01:12:49
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()
发布于 2015-11-13 01:01:52
如果JavaDriver可以提交查询,只需在RP创建上读取并发送适当的查询,则使用查询创建保留策略。您还可以通过CLI或curl
直接将查询提交给curl
。
https://stackoverflow.com/questions/33626714
复制相似问题