本节为您介绍如何使用Connection
对象的方法管理实例上的进程和当前图集上的任务。
每个示例主要展示如何使用所列方法。点击完整示例查看完整代码示例。
Process
所有UQL查询(使用write()
方法执行的算法除外)都作为进程运行。进程完成后,其结果会立刻返回给客户端,但不会被存储。
top()
获取实例中所有正在运行和正在停止的进程。
参数:
RequestConfig
(可选):配置请求。
返回值:
Response
:实例中的全部进程列表。
// 获取实例中所有正在运行和正在终止的进程
let resp = await conn.top();
console.log(resp.data);
[
{
process_id: 'a_0_1519_2',
status: 'RUNNING',
process_uql: 'n().e().n().e().n().e().n() as p return count(p)',
duration: '7'
}
]
kill()
终止实例中正在进行的进程。
参数:
string
:待终止的进程ID;设定为*
时终止全部进程。boolean
(可选):设置为true时忽略进程ID并终止所有进程。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
// 获取实例中所有正在运行和正在终止的进程并终止所有进程
let resp1 = await conn.top();
let processList = resp1.data.map((item) => [
item.process_id,
item.process_uql,
]);
console.log(processList);
let resp = await conn.kill("*");
console.log(resp.status.code_desc);
[
[ 'a_2_1542_2', 'n().e().n().e().n().e().n() as p return count(p)' ],
[ 'a_6_1597_2', 'n().e().n().e().n()as p return count(p)' ]
]
SUCCESS
Task
使用write()
方法执行的算法作为任务运行。这些任务存储在算法运行的图集里,直至任务被删除。
showTask()
获取当前图集的任务。
参数:
string
(可选):要检索的算法名称或任务 ID。RequestType.TASK_STATUS
(可选):任务状态。RequestConfig
(可选):配置请求。
返回值:
Task[]
:图集中的全部任务列表。
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// 在图集miniCircle上运行一个算法任务
let algoTest = await conn.uql(
"algo(degree).params({order: 'desc'}).write({file:{filename: 'degree_all'}})",
requestConfig
);
// 获取以上任务并展示任务信息
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
await sleep(3000);
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log("Task ID: ", taskId);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
Task ID: 54252
Algo Name: degree
Task Result: {
total_degree: '591.000000',
avarage_degree: '1.944079',
result_files: 'degree_all'
}
clearTask()
从当前图集清除(删除)任务。状态为COMPUTING
和WRITING
的任务无法被清除。
参数:
string
(可选):要检索的算法名称或任务 ID。RequestType.TASK_STATUS
(可选):任务状态。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// 在图集miniCircle上运行一个算法任务
let algoTest = await conn.uql(
"algo(degree).params({order: 'desc'}).write({file:{filename: 'degree_all'}})",
requestConfig
);
// 清除以上任务并打印错误码
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let resp = await conn.clearTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log("Task ID: ", taskId);
console.log("Task cleared: ", resp.status.code_desc);
Task ID: 60451
Task cleared: SUCCESS
stopTask()
终止当前图集里状态为COMPUTING
的任务。
参数:
string
ornumber
:待终止的任务ID;设定为*
时终止全部任务。RequestConfig
(可选):配置请求。
返回值:
Response
:请求的结果。
let requestConfig = <RequestType.RequestConfig>{
useMaster: true,
graphSetName: "miniCircle",
};
// 在图集miniCircle上运行一个算法任务
let algoTest = await conn.uql(
"algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID'}})",
requestConfig
);
// 终止以上任务并打印错误代码
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let stopTask = await conn.stopTask(taskId, requestConfig);
console.log("Task ID: ", taskId);
console.log("Task stopped: ", resp.status.code_desc);
// 获取以上终止的任务
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_STOPPED,
requestConfig
);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
Task ID: 60495
Task stopped: SUCCESS
Algo name: [ 'louvain' ]
Task result: [ { community_count: '11', modularity: '0.533843' } ]
完整示例
import { ConnectionPool, ULTIPA } from "@ultipa-graph/ultipa-node-sdk";
import { GraphExra } from "@ultipa-graph/ultipa-node-sdk/dist/connection/extra/graph.extra";
import { getEdgesPrintInfo } from "@ultipa-graph/ultipa-node-sdk/dist/printers/edge";
import { RequestType } from "@ultipa-graph/ultipa-node-sdk/dist/types";
import { ListFormat } from "typescript";
let sdkUsage = async () => {
// 设置连接
// URI示例: hosts="mqj4zouys.us-east-1.cloud.ultipa.com:60010"
let hosts = [
"192.168.1.85:60061",
"192.168.1.86:60061",
"192.168.1.87:60061",
];
let username = "***";
let password = "***";
let connPool = new ConnectionPool(hosts, username, password);
// 建立与数据库的连接
let conn = await connPool.getActive();
let isSuccess = await conn.test();
console.log(isSuccess);
// 配置请求
let requestConfig = <RequestType.RequestConfig>{
graphSetName: "miniCircle",
useMaster: true,
};
// 在图集miniCircle上运行一个算法任务
let algoTest = await conn.uql(
"algo(louvain).params({phase1_loop_num: 20, min_modularity_increase: 0.001}).write({file:{filename_community_id: 'communityID'}})",
requestConfig
);
// Retrieves the above task
let taskInfo = algoTest.data?.get(0).asTable();
let taskId = taskInfo.getRows()[0][0];
let resp = await conn.showTask(
taskId,
RequestType.TASK_STATUS.TASK_DONE,
requestConfig
);
console.log(
"Algo name: ",
resp.data.map((item) => item.task_info.algo_name)
);
console.log(
"Task result: ",
resp.data.map((item) => item.result)
);
};
sdkUsage().then(console.log).catch(console.log);