Scan Applying a Record UDF - aerospike-community/aerospike-client-php GitHub Wiki

Scan Applying a Record UDF

Use the following Aerospike PHP client APIs to apply a UDF to each record in a set in the background:

  • scanApply()
  • scan()

UDFs must be registered with the Aerospike server.

Running the Background Scan

This example uses the registered a UDF module named rec_udf with the Lua function accumulate:

function accumulate(rec, collector, source)
    rec[collector] = rec[collector] + rec[source]
    aerospike:update(rec)
end

To apply this UDF to all the records of a specified set:

$status = $db->scanApply("test", "users", "rec_udf", "accumulate", ["compensation", "income"], $scan_id);
if ($status == Aerospike::OK) {
    echo "The background scan ID is $scan_id\n";
    while(true) {
        $status = $db->scanInfo($scan_id, $info);
        if ($status == Aerospike::OK) {
            var_dump($info);
            if ($info["status"] === Aerospike::SCAN_STATUS_COMPLETED) {
                echo "Background scan is complete!";
                break;
            }
        }
        sleep(1);
    }
} else {
    echo "An error occurred while launching the background scan [{$db->errorno()}] ".$db->error();
}

The records update and compensation adds income to its value.