Skip to content
Webinar - July 10: Cut Infra Costs by 80% with Smarter DRAM, NVMe & Cloud Storage StrategyRegister now

Background filter query

A common use case for a background query is to perform maintenance or cleanup operations on a database. Unlike production queries, which are highly optimized, maintenance operations may involve scans of the entire database for records which meet some criteria.

  • Create a filter expression which selectively retrieves records. You can filter by:

  • Process the query in the background.

  • Perform one or more operations on the returned records.

    Record operations include:

Scans which go through an entire dataset can take a long time. Aerospike provides tools for monitoring long-running queries. See Query Management for more information.

The following example creates a filter expression which identifies all records which do not have a TTL (time to live) value set. The TTL value specifies a duration in seconds after which the record expires and is removed from the set.

private static void touchByTTL(AerospikeClient client) {
Statement stmt = new Statement();
stmt.setNamespace(namespace);
stmt.setSetName(mySet);
WritePolicy policy = new WritePolicy();
// Create the expression
policy.filterExp = Exp.build(Exp.eq(Exp.ttl(), Exp.val(-1)));
// Touch each record found by the expression
ExecuteTask task = client.execute(policy, stmt, Operation.touch());
System.out.println("Touched records with TTL equals to -1");
}

For monitoring purposes, you must have the task ID of a particular query. The following example displays the task ID of the current job:

System.out.println("task.id: " + task.getTaskId());

Output:

-> task.id: 5234562535299509836

Query management

Use task ID of your background query with the Aerospike admin tool to manage the job, or terminate it.

Admin+> show jobs queries trid 5234562535299509836
~~~~~~~~~~~~~Query Jobs (2024-11-30 23:21:42 UTC)~~~~~~~~~~~~~
Node |mycluster-1:3000 |172.17.0.2:3000
Namespace |test |test
Module |query |query
Type |basic |basic
Progress % |100.0 |100.0
Transaction ID |5234562535299509836 |5234562535299509836
Time Since Done |00:12:51 |00:12:51
active-threads |0 |0
from |127.0.0.1+60036 |172.17.0.3+55372
n-pids-requested |2.048 K |2.048 K
net-io-bytes |30.000 B |149.000 B
net-io-time |00:00:00 |00:00:00
recs-failed |0.000 |0.000
recs-filtered-bins|0.000 |0.000
recs-filtered-meta|0.000 |0.000
recs-succeeded |0.000 |1.000
recs-throttled |0.000 |0.000
rps |0.000 |0.000
run-time |00:00:00 |00:00:00
set |testset |testset
sindex-name |mysindex |mysindex
socket-timeout |00:00:30 |00:00:30
status |done(ok) |done(ok)
Number of rows: 23
Admin+> manage jobs kill trids 1343444200604843206 9156474088110606100
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Kill Jobs (2024-10-20 23:57:22 UTC)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Node| Transaction ID|Namespace|Module| Type| Response
10.0.0.1:3000|9156474088110606100| bar|scan |basic|ok
10.0.0.2:3000|1343444200604843206| bar|query |basic|Failed to kill job : job not active.
Number of rows: 1
Feedback

Was this page helpful?

What type of feedback are you giving?

What would you like us to know?

+Capture screenshot

Can we reach out to you?