Domanda

Supponiamo che io sono un grande ammount di documenti eterogenei JSON (cioè chiamati associazioni dei valori-chiave) e una gerarchia di classi (ossia set denominati) che questi documenti sono collegati. Ho bisogno di creare una struttura di dati che consentirà:

  1. operazioni CRUD sui documenti JSON.
  2. documenti Recupero JSON per ID molto velocemente .
  3. Recupero tutti i documenti JSON che sono attaccati ad una certa classe molto velocemente .
  4. Modifica classe gerarchia:. L'aggiunta / eliminazione di classi, riorganizzarli

Ho inizialmente è venuta l'idea di archiviare documenti JSON in un database document-oriented (come CouchDB o MongoDB) e la memorizzazione gerarchia di classi in un deposito RDF (come 4store). 1, 2 e 4 sono poi capito, naturalmente, e 3 risolti mantenendo elenco di ID documento allegato per ogni classe nella memoria.

Ma poi ho pensato che uno storage RDF potrebbe effettivamente fare la parte del documento-oriented di recupero di documenti JSON per ID. A prima vista questo sembra vero, ma sto ancora preoccupato per 2 e 3. C'è un deposito RDF che è in grado di recuperare i documenti (nodi) ad una velocità di db orientati ai documenti servono documenti? Quanto velocemente si servirà 3 come query? Ho sentito un po 'di depositi di CDR di essere lento, problema reificazione, ecc

C'è un deposito di RDF che è anche più confortevole per gli oggetti casuali Recupero di ID, come CouchDB, per esempio? Qual è la differenza tra l'utilizzo di archiviazione dei documenti-oriented e RDF per la memorizzazione, il recupero e la modifica di JSON-come oggetti?

È stato utile?

Soluzione

La cosa più vicina si può utilizzare nei database CDR sono chiamati grafici. In un grafico di nome, si può mettere una serie di triple RDF. Questo insieme di triple può affermare da uno o molti documenti RDF a seconda delle esigenze. Diciamo che si desidera uno di nome grafico per documento RDF. Si potrebbe chiamare il grafico con un URI che riflette la posizione del file un URL o un IRI. Per esempio ...

http://yourdomain/files/rdf_file_1

o

file:///home/myrdffiles/file1

4store è un negozio di quad. negozi Quad intitolate grafici e 4store è specialmente disegno per gestire questa situazione.

Con 4store è possibile eseguire il seguente comando per triple assert in un nome grafico:

curl -T your_file.rdf http://your_4store_database/data/http://yourdomain/files/rdf_file_1

Dopo /data/ si può mettere l'identificatore GRAFICO (IRI), dove le triple stanno per essere affermato. Vedere 4store SPARQL server di e 4store Libs client per ulteriori dettagli.

Una volta che hai i dati affermato, con SPARQL è anche possibile utilizzare il grafico chiamato a dirigere la query a quello grafico:

SELECT * WHERE {
   GRAPH <http://youdomain/files/rdf_file_1> {
        .... some triple patterns in here ....
   }
}

Inoltre, 4store supporta anche JSON in modo da poter recuperare il gruppo di risultati SPARQL direttamente in JSON.

Se si decide di utilizzare 4store troverete un valido supporto qui: http://4store.org/contact

Altri suggerimenti

È originariamente chiesto a questa domanda per database del grafico (come Neo4j ). È per questo che mi piacerebbe aggiungere alcune note.

    database
  1. Grafico uso integrato indicizzazione per i nodi e le relazioni () in modo del digiuno ricerca iniziale per i nodi principali dei documenti avviene tramite che (esterno o in indici grafico)
  2. aggiuntive negli indici grafico per i percorsi (in realtà alberi alla radice) può essere modellato detergente che solo un valore-chiave di ricerca)
  3. Se si modella i documenti come gli alberi di nodi con proprietà si può fare qualsiasi semplice, e CRUD complesso le operazioni (anche strutturali)
  4. il recupero di tutti i documenti di un "tipo" o "classe" può ancora essere fatto da un indice (nodi principali indice per tipo) o nella categoria Nodi Grafico
  5. si può mettere quei "tipi o di classe" categoria-nodi in una gerarchia (o grafico), che poi possono essere modificati utilizzando la solita API database grafico
  6. attraversando il grafico può essere fatto utilizzando trasbordatori / linguaggio di query grafico integrato (ad esempio cifra per Neo4j )
  7. dati gerarchici di carico può essere fatto sia da parte degli importatori personalizzati o un importatore più generale sub-grafico (ad esempio GEOFF )
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top