Ist es möglich, den RDF-Speicher auch als dokumentorientierte Datenbank zu verwenden?
-
26-10-2019 - |
Frage
Angenommen, ich habe ein großes Munmount heterogener JSON-Dokumente (dh benannte Schlüsselwert-Zuordnungen) und eine Hierarchie von Klassen (dh benannte Sets), an die diese Dokumente beigefügt sind. Ich muss eine Datenstruktur einrichten, die zulässt:
- CRUD -Operationen auf JSON -Dokumenten.
- JSON -Dokumente nach ID abrufen sehr schnell.
- Abrufen aller JSON -Dokumente, die an eine bestimmte Klasse beigefügt sind sehr schnell.
- Bearbeitungsklassenhierarchie: Hinzufügen/Löschen von Klassen, neu ordnen.
Ich habe zunächst die Idee entwickelt, JSON-Dokumente in einer dokumentorientierten Datenbank (wie CouchDB oder MongoDB) zu speichern und Klassenhierarchie in einem RDF-Speicher (wie 4Store) zu speichern. 1
, 2
und 4
werden dann natürlich herausgefunden, und 3
gelöst, indem die Liste der beigefügten Dokument -IDs für jede Klasse im Speicher aufbewahrt wird.
Aber dann stellte ich fest, dass ein RDF-Speicher tatsächlich den dokumentorientierten Teil des Abrufens von JSON-Dokumenten durch ID ausführen könnte. Auf einen ersten Blick scheint dies wahr zu sein, aber ich bin immer noch besorgt darüber 2
und 3
. Gibt es einen RDF-Speicher, der in der Lage ist, Dokumente (Knoten) mit einem Geschwindigkeitsdokument-orientierten DB-Servic-Dokumenten abzurufen? Wie schnell wird es dienen 3
-ähnliche Fragen? Ich habe ein wenig von RDF -Storagen gehört, das langsam, das Problem der Wiedergabe usw. ist.
Gibt es einen RDF -Speicher, der beispielsweise auch so komfortabel ist, dass sie durch ID nach ID abrufen? Was ist der Unterschied zwischen der Verwendung von dokumentorientiertem und RDF-Speicher zum Speichern, Abrufen und Bearbeiten von JSON-ähnlichen Objekten?
Lösung
Das nächste, was Sie in RDF -Datenbanken verwenden können, werden als Diagramme bezeichnet. In einem benannten Diagramm können Sie eine Reihe von RDF -Dreifachgräben einstellen. Dieser Tripel kann je nach Ihren Anforderungen aus einem oder vielen RDF -Dokumenten gilt. Nehmen wir an, Sie möchten ein mit dem Namen Graph pro RDF -Dokument. Sie können das Diagramm mit einem URI benennen, der den Dateispeicherort eine URL oder eine IRI widerspiegelt. Zum Beispiel ...
http://yourdomain/files/rdf_file_1
oder
file:///home/myrdffiles/file1
4Store ist ein Quad -Store. Quad -Stores unterstützt benannte Graphs und 4Store ist speziell für das Verhalten dieser Weise gestaltet.
Mit 4 Store können Sie den folgenden Befehl ausführen, um Dreifach in einem benannten Diagramm zu gründen:
curl -T your_file.rdf http://your_4store_database/data/http://yourdomain/files/rdf_file_1
Nach /data/
Sie können den Graph Identifier (IRI), in dem die Dreifachs geltend gemacht werden, einsetzen. Sehen 4Store Sparql Server und 4 -Store -Kunde Libs für mehr Details.
Sobald Sie Ihre Daten geltend gemacht haben, können Sie mit SPARQL auch das benannte Diagramm verwenden, um Ihre Abfrage in dieses Diagramm zu lenken:
SELECT * WHERE {
GRAPH <http://youdomain/files/rdf_file_1> {
.... some triple patterns in here ....
}
}
Darüber hinaus unterstützt 4Store JSON, sodass Sie das Sparql -Ergebnis direkt in JSON abrufen können.
Wenn Sie sich für die Verwendung von 4Store entscheiden, finden Sie hier wertvolle Unterstützung: http://4store.org/contact
Andere Tipps
Sie haben diese Frage ursprünglich für Grafikdatenbanken gestellt (wie Neo4j). Deshalb möchte ich ein paar Notizen hinzufügen.
- Diagrammdatenbanken verwenden integriert Indizierung Für Knoten (und Beziehungen) erfolgt die schnelle Anfänger nach den Stammknoten Ihrer Dokumente über diese (externe oder in Graphindizes)
- Zusätzliche In-Graph-Indizes für Pfade (tatsächlich Bäume bis zur Wurzel) können sauberer modelliert werden, die nur eine Schlüsselwerte suchen)
- Wenn Sie Ihre Dokumente als Bäume von Knoten mit Eigenschaften modellieren, können Sie einfache und komplexe CRUD -Operationen ausführen (auch strukturell)
- Das Abrufen aller Dokumente eines "Typs" oder "Klasse" kann erneut durch einen Index (Index -Root -Knoten zum Typ) oder in Grafikkategorieknoten erfolgen
- Sie können diese "Typen oder Klasse" -Kategorie-Nodes in eine Hierarchie (oder ein Diagramm) einfügen, die dann mit der üblichen Diagrammdatenbank-API bearbeitet werden können
- Durch das Durchqueren des Diagramms kann erledigt werden. Traverser / Integrierte Graph -Abfragesprache (z. B. zB Cypher für Neo4j)
- Das Laden hierarchischer Daten kann entweder von benutzerdefinierten Importeuren oder einem allgemeineren Subgraphimporteur (z. Geoff)