Come rappresentare una struttura ad albero in NoSQL

5

Sono nuovo di NoSQL e sto giocando con un progetto personale sullo stack MEAN (Mongo ExpressJs AngularJs NodeJs). Sto costruendo un editor di documenti che gestisce i nodi di dati. Ogni documento è in realtà un albero.

Ho un API CRUD per i documenti, per creare nuovi alberi e un api CRUD per i nodi in un determinato documento.

In questo momento i documenti sono rappresentati come una raccolta che contiene tutto, inclusi i nodi. La relazione genitore dei bambini è fatta da ids. Quindi i nodi sono una mappa per ID e ogni nodo ha riferimenti a quali nodi sono i loro figli. Ho scelto questo approccio "piatto" perché è più semplice ottenere un nodo tramite id da un documento.

Essendo abituato ad avere una tabella delle relazioni tra nodi e documenti, una tabella delle relazioni tra nodi e nodi figli, trovo un po 'strano che io debba salvare l'intera mappa dei "nodi" ogni volta che aggiorno un nodo.

Esiste un modo migliore per rappresentare tale tipo di dati in NoSQL?

    
posta Vlad Nicula 24.05.2014 - 12:00
fonte

2 risposte

10

Hai una serie di opzioni quando rappresenti una struttura ad albero con MongoDB. Ecco cinque "schemi" che potresti applicare (link ai dettagli alla fine).

  • Il modello Riferimenti figlio memorizza ciascun nodo dell'albero in un documento; oltre al nodo dell'albero, il documento memorizza in un array l'id (i) dei figli del nodo.
  • Il modello Riferimenti padre memorizza ciascun nodo dell'albero in un documento; oltre al nodo dell'albero, il documento memorizza l'id del genitore del nodo.
  • Il modello Array of Ancestors memorizza ciascun nodo dell'albero in un documento; oltre al nodo dell'albero, il documento memorizza in un array l'id (i) degli antenati o del percorso del nodo.
  • Il modello Percorsi materializzati memorizza ciascun nodo dell'albero in un documento; oltre al nodo dell'albero, il documento memorizza come stringa l'id (s) degli antenati o del percorso del nodo.
  • Il modello Insiemi nidificati memorizza ciascun nodo dell'albero in un documento; oltre al nodo dell'albero, il documento memorizza l'id del genitore del nodo, l'arresto iniziale del nodo nel campo sinistro e il punto di ritorno nel campo corretto.

Questo tutorial nel tutorial di MongoDB discute i pro e i contro di ciascun pattern: link

    
risposta data 26.05.2014 - 13:52
fonte
0

Uno dei principi di NoSQL è utilizzare il tipo di database più adatto all'attività in corso. Hai la possibilità di utilizzare qualcosa di diverso da MongoDB?

Per una gerarchia di documenti, puoi provare qualcosa come lo standard Java Content Repository . È implementato dalla maggior parte dei principali sistemi CM e ha anche un'implementazione di riferimento completamente conforme: Apache Jackrabbit .

    
risposta data 24.05.2014 - 19:46
fonte

Leggi altre domande sui tag