Question

Supposons que j'ai un grand ammount de documents JSON hétérogènes (à savoir des cartographies nommées valeur clé) et une hiérarchie de classes (à savoir des ensembles nommés) que ces documents sont attachés. Je dois mettre en place une structure de données qui permettra:

  1. opérations CRUD sur les documents JSON.
  2. Récupération de documents JSON par ID très rapidement .
  3. Récupération tous les documents JSON qui sont attachés à une certaine classe très rapidement .
  4. Modification de la hiérarchie des classes:. Ajouter / supprimer des classes, les réarranger

Je suis d'abord venu avec l'idée de stocker des documents JSON dans une base de données orientée document (comme CouchDB ou MongoDB) et le stockage de la hiérarchie des classes dans un stockage de RDF (comme 4store). 1, 2 et 4 sont ensuite cernées naturellement, et 3 résolus en maintenant la liste des ID de document ci-joint pour chaque classe dans le stockage.

Mais alors je me suis dit qu'un stockage RDF pourrait réellement faire la partie orientée document de la récupération de documents JSON par ID. À première vue, cela semble vrai, mais je suis toujours préoccupé par 2 et 3. Y at-il un stockage de RDF qui est capable de récupérer des documents (nœuds) chez un orienté document vitesse db servent des documents? A quelle vitesse il servira 3 comme des requêtes? J'ai entendu un peu de RDF étant lente, stockages problème de réification, etc.

Y at-il un stockage de RDF qui est aussi confortable pour les objets occasionnels par ID Aller chercher, comme CouchDB, par exemple? Quelle est la différence entre l'utilisation du stockage orientée documents et RDF pour le stockage, la récupération et l'édition JSON comme des objets?

Était-ce utile?

La solution

La chose la plus proche que vous pouvez utiliser dans les bases de données RDF sont des graphes nommés. Dans un graphique nommé, vous pouvez mettre un ensemble de triplets RDF. Cet ensemble de triplets peut affirmer d'un ou plusieurs documents RDF en fonction de vos besoins. Disons que vous voulez un graphe nommé par document RDF. Vous pouvez nommer le graphique avec un URI qui reflète l'emplacement du fichier une URL ou un IRI. Par exemple ...

http://yourdomain/files/rdf_file_1

ou

file:///home/myrdffiles/file1

4store est un magasin de quad. magasins Quad prennent en charge les graphiques nommés et 4store est spécialement conçu pour gérer cela.

Avec 4store vous pouvez exécuter la commande suivante pour triplets assert dans un graphe nommé:

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

Après /data/ vous pouvez mettre l'identificateur de GRAPH (IRI) où les triplets vont être affirmé. Voir 4store sparql serveur et 4store client Libs pour plus de détails.

Une fois que vous avez vos données affirmé, avec SPARQL, vous pouvez également utiliser le graphique nommé pour diriger votre requête à ce graphique:

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

En outre, 4store prend également en charge JSON afin que vous puissiez récupérer le resultset SPARQL directement JSON.

Si vous décidez d'utiliser 4store vous trouverez une aide précieuse ici: http://4store.org/contact

Autres conseils

Vous avez demandé à l'origine de cette question pour bases de données graphiques (comme Neo4j ). Voilà pourquoi je voudrais ajouter quelques notes.

  1. bases de données graphique utilisation intégrée indexation pour les nœuds (et relations) de sorte que le rapide recherche initiale pour les noeuds racine de vos documents se fait via ce (externe ou index graphique)
  2. supplémentaires dans les index graphique pour les chemins (en fait des arbres à la racine) peut être modélisé plus propre que juste une recherche de valeur clé)
  3. Si vous modélisez vos documents comme des arbres de noeuds ayant des propriétés que vous pouvez faire tout simple, et les opérations CRUD complexes (aussi structurelles)
  4. récupérer tous les documents peuvent à nouveau être fait un « type » ou « classe » par un indice (indice des nœuds racine au type) ou dans la catégorie graphique noeuds
  5. vous pouvez mettre ces « types ou classes » catégorie nœuds dans une hiérarchie (ou graphique) qui peut être édité puis en utilisant l'API habituelle de base de données graphique
  6. traversant le graphique peut être fait en utilisant transbordeurs / graphique langage de requête intégré (par exemple Cypher pour Neo4j )
  7. des données hiérarchiques de chargement peut être fait par les importateurs personnalisés ou un importateur sous-graphique plus général (par exemple GEOFF )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top