嬴图的图算法可通过GQL和UQL在嬴图Manager和嬴图CLI上执行,或将嬴图Drivers集成到应用程序中。嬴图Drivers支持多种编程语言,包括Java、Python、Go、Node.js和C#。
算法结果
算法执行结果包括基本结果和一些可选的统计概述。
- 基本结果是算法的核心输出,如点排名、成对相似度和计算的指标。
- 统计概述(如有)提供汇总数据,包括平均值、总和和分布细节,以便对基本结果作进一步分析。
执行模式
算法支持以下六种执行模式:文件回写、数据库回写、统计回写、完整返回、流式返回和统计返回。
文件回写
文件回写模式下,算法以作业形式执行,将基本结果写至文件中,方便后续访问。该模式在处理大型输出结果时非常有用,不用将数据直接返回至客户端,尤其适用于需要离线存储或对数据进行后续处理的场景。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
write_params: {
file: {
<filename_item1>: "<fileName1>",
<filename_item2?>: "<fileName2?>",
...
}
}
})
algo(<algoName>).params({
project: "<projectName>",
...
}).write({
file: {
<filename_item1>: "<fileName1>",
<filename_item2?>: "<fileName2?>",
...
}
})
详情
- 可以指定输出文件的扩展名(如
.csv
或.txt
),如果未指定,系统会使用默认格式或通用格式。
数据库回写
数据库回写模式下,算法以作业形式执行,将基本结果中的指定列直接写入数据库中指定的点属性里,以便永久存储,在未来查询或分析时,能随时使用。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
write_params: {
db: {
property: "<propertyName>"
}
}
})
algo(<algoName>).params({
project: "<projectName>",
...
}).write({
db: {
property: "<propertyName>"
}
})
详情
数据库回写作用于图集中的所有点,将结果写入指定属性,无需定义标签(schema)。
- 如果标签下指定属性不存在,系统会自动创建该属性。
- 如果标签下指定属性存在,已存在的属性值将被覆盖。
- 仅当已有属性和新结果的数据类型不匹配时,相关标签回写失败。
- 若点有算法结果返回,返回值会存储在属性里;若点没有算法结果返回,则根据结果类型接收默认值,如0或空字符串。
统计回写
统计回写模式下,算法以作业形式执行。执行过程会生成统计概述,并与作业一同保存下来。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
write_params: {
stats: {
<stats1?>: <boolean?>,
<stats2?>: <boolean?>,
...
}
}
})
algo(<algoName>).params({
project: "<projectName>",
...
}).write({
stats: {
<stats1?>: <boolean?>,
<stats2?>: <boolean?>,
...
}
})
详情
- 当
stats
留空时,所有统计概述会保存在作业里。也可在stats
中指定某个统计概述,通过设定true
或false
保留想要的概述。
完整返回
完整返回模式下,算法以实时进程形式执行。算法执行完成后,将所有结果和统计概述汇总成单条响应,返回给客户端。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
return_params: {}
}) YIELD <resultsAlias>, <statsAlias?>
RETURN <resultsAlias>, <statsAlias?>
exec{
algo(<algoName>).params({
...
}) as <resultsAlias>, <statsAlias?>
return <resultsAlias>, <statsAlias?>
} on <projectName>
详情
- 使用能生成统计概述的算法时,可以声明两个别名:第一个别名用于基本结果,第二个别名用于统计概述。如果算法不生成统计概述,则只能为算法结果声明一个别名。
流式返回
流式返回模式下,算法以实时进程形式执行。基本结果在生成时会流式逐步返回至客户端。在此模式下,资源使用率得到优化,访问结果速度加快,非常适合需要即时反馈的应用程序。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
return_params: {type: "stream"}
}) YIELD <resultsAlias>
RETURN <resultsAlias>
exec{
algo(<algoName>).params({
...
}).stream() as <resultsAlias>
return <resultsAlias>
} on <projectName>
详情
- 流式返回模式不会生成统计概述。
统计返回
统计返回模式下,算法以实时进程形式执行。算法执行完成后,将统计概述返回给客户端。
CALL algo.<algoName>("<projectName>", {
params: {
...
},
return_params: {type: "stats"}
}) YIELD <statsAlias>
RETURN <statsAlias>
exec{
algo(<algoName>).params({
...
}).stats() as <statsAlias>
return <statsAlias>
} on <projectName>
执行HDC算法或分布式算法
嬴图的所有图算法均提供HDC版本,部分算法也提供分布式版本。当算法同时提供HDC版本和分布式版本时(如Louvain算法),其参数设置可能有所不同。
HDC算法和分布式算法对执行模式的支持也有所不同:
执行模式 | HDC算法 | 分布式算法 |
---|---|---|
文件回写 | 支持 | 支持 |
数据库回写 | 支持 | 支持 |
统计回写 | 支持 | 不支持 |
完整返回 | 支持 | 不支持 |
流式返回 | 支持 | 不支持 |
统计返回 | 支持 | 不支持 |
每个投影类型专为执行特定算法设计:HDC投影用于执行HDC算法,分布式投影用于执行分布式算法。需根据算法执行时所在投影的类型选择算法版本。