Raccomandazione per un database di interrogare i record con attributi che sono matrici o hash?

0

Sto costruendo un sito con una struttura dati molto semplice: documenti che sono nodi che fanno riferimento ad altri nodi che hanno ciascuno array di genitori, figli e fratelli, quindi la struttura è:

Node:
uuid
name [string]
description [string]
children, parents, siblings [arrays of node uuids]

Ciò che è più importante è rendere la seguente query facile e veloce: all nodes with uuid x in their children/parents/siblings array .

Sto prendendo in considerazione l'utilizzo di Riak o forse Postgres con hstore, ma vorrei altri suggerimenti su un buon database progettato per archiviare e recuperare facilmente e velocemente i dati con questa struttura.

La persistenza è importante, la scalabilità è una preoccupazione secondaria in questo momento.

    
posta Marcus 18.02.2012 - 06:51
fonte

1 risposta

4

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.

    
risposta data 18.02.2012 - 08:27
fonte

Leggi altre domande sui tag