Vue d’ensemble
L'algorithme K-Hop All identifie le voisinage de chaque node au sein d'un graph. Cet algorithme trouve une application étendue dans divers scénarios, y compris la découverte de relations, la prédiction d'impact et la suggestion d'amis.
L'algorithme K-Hop All peut être considéré comme l'exécution par lots de la requête UQL K-Hop Query.
Considérations
Bien que l'algorithme K-Hop All soit optimisé pour une performance à haute concurrence, il est important de noter que cet algorithme peut nécessiter des ressources de calcul significatives lorsqu'il s'agit de grands graphs (ceux avec des dizaines de millions de nodes ou edges), ou de graphs contenant de nombreux super nodes. Pour optimiser la performance, il est conseillé d'éviter d'effectuer un calcul K-Hop All excessivement profond, en considérant les caractéristiques spécifiques et la taille du graph analysé.
Dans le graph G = (V, E), si |V|/|E|=100, interroger les voisins à 5 sauts d'un node nécessite une complexité calculatoire théorique de 105 (équivalent à 10 milliards de calculs), ce qui prendrait environ 100ms. En extrapolant, effectuer une telle requête dans un graph de 10 millions de nodes nécessiterait 1 million de secondes (équivalent à environ 12 jours). Il est important de considérer les exigences computationnelles et les délais requis lors du traitement de graphs de cette échelle.
Syntaxe
- Commande :
algo(khop_all)
- Paramètres :
Nom |
Type |
Spéc |
Par défaut |
Optionnel |
Description |
---|---|---|---|---|---|
ids / uuids | []_id / []_uuid |
/ | / | Oui | ID/UUID des nodes cibles pour effectuer les requêtes k-hop, cibler tous les nodes si non défini |
k_start | int | >= 1 | 1 |
Oui | Profondeur de départ de la requête k-hop, la profondeur d'interrogation est [k_start , k_end ] |
k_end | int | >= 1 | 1 |
Oui | Profondeur de fin de la requête k-hop, la profondeur d'interrogation est [k_start , k_end ] |
direction | string | in , out |
/ | Oui | Toutes les directions des edges dans le path d'interrogation |
node_property | []@<schema>?.<property> |
Type numérique, doit être LTE | / | Oui | Node properties pour effectuer des agrégations ; cette option doit être utilisée avec aggregate_opt |
aggregate_opt | []string | max , min , mean , sum , var , dev |
/ | Oui | Les méthodes d'agrégation à appliquer aux valeurs des node properties spécifiées ; cette option doit être utilisée avec node_property , chaque méthode correspondant à une propertymax : maximum, min : minimum, mean : moyenne, sum : somme, var : variance, dev : écart-type |
src_include | int | 0 , 1 |
0 |
Oui | 1 signifie inclure chaque node cible dans ses résultats d'interrogation et d'agrégation, 0 signifie ne pas inclure |
limit | int | ≥-1 | -1 |
Oui | Nombre de résultats à retourner, -1 pour retourner tous les résultats |
Exemples
L'exemple est un réseau de transactions entre des cartes bancaires :
File Writeback
Spéc |
Contenu | Description |
---|---|---|
filename_ids | _id ,_id |
Le premier _id représente le node cible, le second _id représente le voisin du node cible |
filename | _id ,aggregate_result1 ,...,aggregate_resultN ,count |
_id représente le node cible, aggregate_result1 ~ aggregate_resultN sont les résultats d'agrégation, le dernier count est le nombre total de voisins du node cible |
algo(khop_all).params({
ids: ['card1', 'card7'],
k_start: 2,
k_end: 3,
direction: 'out',
node_property: ['@card.level', '@card.balance'],
aggregate_opt: ['max', 'mean']
}).write({
file:{
filename_ids: 'neighbors',
filename: 'aggregations'
}
})
Résultats : Fichiers neighbors, aggregations
card1,card7
card1,card3
card1,card4
card7,card4
card1,4.000000,3174.103333,3.000000,
card7,2.000000,4768.800000,1.000000,
Property Writeback
Spéc | Contenu | Écrire dans | Type de données |
---|---|---|---|
property | Nombre de voisins | Node property | double |
algo(khop_all).params({
k_start: 2,
k_end: 2
}).write({
db:{
property: 'khop2'
}
})
Résultats : Le nombre de voisins à 2 sauts de chaque node est écrit dans une nouvelle property nommée khop2
Direct Return
Ordinal Alias | Type | Description |
Colonnes |
---|---|---|---|
0 | []parNode | Node et ses résultats d'agrégation, et nombre de voisins | _uuid , value |
algo(khop_all).params({
ids: ['card1', 'card7'],
k_start: 2,
k_end: 3,
node_property: ['@card.level', '@card.balance'],
aggregate_opt: ['max', 'mean']
}) as r
return r
Résultats : r
_uuid | valeur |
---|---|
1 | 5.000000,6884.060000,6.000000, |
7 | 5.000000,7361.870000,5.000000, |
Stream Return
Ordinal Alias | Type | Description |
Colonnes |
---|---|---|---|
0 | []parNode | Node et ses résultats d'agrégation, et nombre de voisins | _uuid , value |
algo(khop_all).params({
uuids: [2],
k_start: 2,
k_end: 2,
node_property: '@card.balance',
aggregate_opt: 'max'
}).stream() as results
return results
Résultats : results
_uuid | valeur |
---|---|
2 | 27123.800000,2.000000, |