La risposta è sfortunatamente: la tua considerazione è completamente corretta in ogni punto. È necessario memorizzare Nodi (Vertices) in una tabella e Bordi che fanno riferimento a un DaNodo e un ToNodo per convertire una struttura di dati del grafico in una struttura dati relazionale. E hai anche ragione, che questo finisce in un gran numero di ricerche, perché non sei in grado di suddividerlo in sottografi, che potrebbero essere interrogati contemporaneamente. Devi passare da un nodo all'altro, da un nodo all'altro, da un nodo all'altro ... e così via (in modo ricorsivo, mentre SQL sta lavorando con gli insiemi).
Il punto è ...
relazionale, grafo orientato, object oriented, Documento base sono diversi tipi di strutture di dati che soddisfano i requisiti differenti. Ecco di cosa si tratta e perché così tanti diversi database NoSQL (la maggior parte di essi sono semplici archivi di documenti), perché non ha senso organizzare grandi dati in modo relazionale.
1 Alternativa - Grafico del database orientati
Ma ci sono anche grafo orientato database NoSQL, che rendono il modello di dati grafico un primo cittadino di classe come OrientDB che sto giocando intorno con un po 'in questo momento. La cosa bella è che, sebbene persista come un grafico, può ancora essere utilizzato in modo relazionale o anche orientato agli oggetti o orientato al documento (cioè interrogando con un semplice vecchio SQL). Ciononostante, Traversing the graph è il modo ottimale per ricavarne i dati di sicuro.
Alternativa 2 - lavorare con i grafici in memoria
Quando si tratta di instradamento veloce, quadri di instradamento come Graphhopper costruire il grafo completo (miliardi di nodi) all'interno della memoria. Perché Graphhopper utilizza un'implementazione MemoryMapped del suo GraphStore, che funziona anche su dispositivi Android con solo alcuni MB di memoria necessari. Il grafico completo viene letto dal database in memoria all'avvio, quindi il routing viene eseguito lì, quindi non è necessario cercare il database.
fonte
2013-11-30 19:19:43
Per darti un consiglio prezioso avrò bisogno di più informazioni dalla tua parte. Quanti nodi e quante relazioni stiamo parlando? –
Beh, direi miliardi di nodi. Come ho detto, questo è per lo più concettuale, ma sono curioso di come ridimensionare per un sacco di record. Ho in mente grafici molto grandi, credo. –
Non è open source ma è esattamente quello che stai cercando: il nuovo Aster 6.0 è dotato di un motore grafico all'interno del database relazionale - si chiama SQL-GR e si propone di utilizzare le funzioni esistenti e nuove su grafici memorizzati in tabelle relazionali (in Aster): rappresentato con la tabella dei nodi e la tabella dei bordi. – topchef