Potresti trovare il tipo di colonna ARRAY e gli operatori associati aiuto qui: tu può indicizzare e interrogare in modo efficiente sul contenuto dell'array, inclusi i contenuti e contenuti delle operazioni.
PostgreSQL presenta anche Common Table Expressions , che sono un modo efficiente e ragionevolmente portatile per esprimere una query ricorsiva in una singola istruzione SQL.
Infine, PostgreSQL ha un tipo di dati UUID nativo che è efficiente da memorizzare, indicizzare e gestire su .
Data la tua query specificata, dovresti avere qualcosa di semplice come:
select uuid from node where ANY(children) = X OR ANY(parents) = X
Ci sono altri modi per scriverlo: la concatenazione degli array o le operazioni di contenimento degli array, ma probabilmente sono i semplici. Le CTE ti consentono di estenderlo in modo ricorsivo se la tua query sulla struttura ad albero, come anticipato, finisce per dover raccogliere più livelli in un'unica operazione.
Nel mio test entrambe le funzionalità hanno funzionato bene per la ricerca su un set di dati da 15 GB senza modifiche sostanziali, su un laptop Mac da 8 GB con memoria disco a rotazione lenta. Date le vostre dichiarazioni, raccomanderei strongmente PostgreSQL come scelta prudente.
Anche in questo caso, nei nostri test, Riak funziona bene e ha strumenti solidi, ma è necessario un cluster di tre macchine fisiche per iniziare davvero a vedere le prestazioni di base. Dal momento che hai bisogno di molta più robustezza per la persistenza rispetto alla scalabilità, penso che sarà molto meno adatto alle tue esigenze in questo momento.