Ho letto Aql Graph Operation e Graphs e non ho trovato alcun esempio concreto e spiegazione delle prestazioni per il caso d'uso di SQL-Traverse.In ArangoDB, l'interrogazione, con i filtri, dai vicini verrà effettuata in O (n)?
Esempio:
Se ho una collezione utenti, che ha un società relazione alla raccolta società
Collection società ha relazione posizione alla raccolta Località;
Collection Località è sia una città, paese, o regione, e ha relazione città, paese, regione a se stesso.
Ora, desidero interrogare tutti gli utenti che appartengono a società in Germania o UE.
SELECT from Users where Users.company.location.city.country.name="Germany";
SELECT from Users where Users.company.location.city.parent.name="Germany";
o
SELECT from Users where Users.company.location.city.country.region.name="europe";
SELECT from Users where Users.company.location.city.parent.parent.name="europe";
Supponendo che Location.name è indicizzato, posso avere le due domande precedenti eseguiti con O (n), con n essendo il numero di documenti in Posizione (O (1) per attraversamento grafico, O (n) per scansione indice)?
Naturalmente, ho potuto solo salvare regionName o countryName direttamente in azienda , come queste città e paesi sono in UE, a differenza di altri posti ..., non sarà probabilmente cambierà, ma cosa succede se ... sai cosa intendo (scherzando, se ho altri casi d'uso che richiedono un aggiornamento costante)
Oh, ho capito, quindi dovrei cambiare il mio modo di pensare, invece di dire "mi porti un elenco di utenti la cui città il cui paese è la Germania", dovrei chiedere per "dare un'occhiata a Germania, seguire la percorsi fino ad arrivare agli utenti e ottenere quella lista ". Quindi se ho più di 1 condizione (scusate la vecchia mente impostata qui) SELEZIONA dagli utenti dove Users.company.location.city.country.name = "Germany" e Users.department.parent.parent = "Sviluppo del prodotto"; con "reparto" può essere gerarchico (proprio come la posizione), ad es. "Backend" -> "Sviluppo Web" -> "Sviluppo software" -> "Sviluppo prodotto"? – TruongSinh
La "intersezione del grafico" è idonea allo scenario sopra descritto ed è O (m + n) dove m è numero se i dipendenti in Germania e n è il numero di dipendenti nel reparto "Sviluppo prodotto"? Ed è 'GRAPH_COMMON_NEIGHBORS' la funzione giusta? – TruongSinh
È possibile aggiungere [istruzioni FILTER alla parte trasversale] (https://docs.arangodb.com/devel/Aql/GraphTraversals.html#filter-examples) e probabilmente si vorrebbe quindi filtrare qualcosa come path.vertices [3 ] .department == "sviluppo prodotto" - o se proviene da un'altra raccolta, potresti prima ottenere quel dipartimento con un 'reparto LET = (per i reparti d IN FILTER nome =" Sviluppo prodotto "RETURN d)' – dothebart