Sto lavorando a un progetto che coinvolge molti client che si connettono a un server (server se necessario) che contiene un mucchio di informazioni sul grafico (attributi e spigoli del nodo). Avranno la possibilità di introdurre un nuovo nodo o edge ogni volta che lo vorranno e quindi richiedere alcune informazioni dal grafico nel suo insieme (la distanza più breve tra due nodi, la colorazione del grafico, ecc.).Come si elabora un grafico costantemente aggiornato, con bassa latenza?
Questo ovviamente è abbastanza facile da sviluppare l'algoritmo ingenuo, ma poi sto cercando di imparare a ridimensionarlo in modo che possa gestire molti utenti che aggiornano il grafico nello stesso momento, molti utenti che richiedono informazioni dal grafico e la possibilità di gestire nodi molto grandi (500k +) e possibilmente anche un numero molto grande di bordi.
Le sfide che posso prevedere:
- con un grafico in costante aggiornamento, ho bisogno di elaborare l'intero grafico ogni volta che qualcuno richiede informazioni ... che aumenterà il tempo di calcolo e la latenza di un bel po '
- con un grafico molto grande, il tempo di calcolo e la latenza saranno ovviamente molto più alti (ho letto che questo è stato risolto da alcune aziende elaborando in batch una tonnellata di risultati e memorizzandoli con un indice per un uso successivo ... ma poi dal mio il grafico viene costantemente aggiornato e gli utenti vogliono le informazioni più aggiornate, questa non è una soluzione praticabile)
- un gran numero di utenti che richiedono informazioni che saranno piuttosto un carico sui server poiché deve elaborare il grafico molte volte
Come posso iniziare ad affrontare queste sfide? Ho guardato su hadoop e spark, ma sembrano soluzioni ad alta latenza (con elaborazione batch) o soluzioni che risolvono problemi in cui il grafico non cambia continuamente.
Mi è venuta l'idea di elaborare diverse parti del grafico e indicizzarle, quindi tenere traccia di dove il grafico viene aggiornato e rielaborare quella sezione del grafico (una sorta di approccio di programmazione dinamica distribuita), ma in non sono sicuro di quanto sia fattibile.
Grazie!
Hai guardato in Giraph? Non penso davvero che tu abbia bisogno di provare a risolvere da solo questi problemi come altri già hanno. –
L'ho esaminato, ma sembra essere basato su batch ... Lo esaminerò di nuovo se ho torto – user947659
C'è anche lo strumento Spark graph. –