4 Stimmen

Unter Verwendung von Spring Data JPA/MongoDB Cross Store kann eine Abfrage über beide Datenbanken erfolgen?

Ich benutze die mongodb-customer-service-data Beispiele (verfügbar unter https://github.com/SpringSource/spring-data-document-examples).

Das Beispiel verwendet @RelatedDocument, um Domänenobjekte über Datenbanken hinweg zu verknüpfen. Es ermöglicht das Speichern und Aktualisieren von Objekten recht gut.

Ich möchte jedoch eine Abfrage erstellen, die Kriterien sowohl gegen die JPA-Datenbank (im Beispiel HSQLDB) als auch gegen MongoDB hat.

Ist das überhaupt möglich? Gibt es irgendwo ein Beispiel, das beweist, dass es möglich ist?


Kommentare, die nicht direkt mit dem Problem zusammenhängen:

Mein Anwendungsfall ist, dass unsere Anwendung eine Oracle-Datenbank ist, wir jedoch jetzt halbstrukturierte Daten erhalten. Die JPA-Entitäten können von einem Benutzer innerhalb bestimmter Einschränkungen gefiltert werden, aber wir möchten diese Fähigkeit auf die halbstrukturierten Daten ausweiten.

Es scheinen auch konkurrierende Technologien wie QueryDSL und EclipseLink zu geben, aber ich finde nichts darüber, wie man Abfragen über Datenbanken hinweg durchführt.

In JPA scheint es nicht möglich zu sein, Abfragen über Datenbanken hinweg zu machen, da verschiedene PersistanceUnits mit jeder Datenbank verbunden sind. Allerdings scheint mongodb cross-store dieses spezielle Problem zu negieren.

0voto

philnate Punkte 1485

Ich habe noch nie Spring Data JPA verwendet, aber wenn JPA dazu nicht in der Lage ist, bezweifle ich, dass Spring Data solche Funktionen bieten wird.
Ich weiß nicht, was Sie unter mongodb cross-store verstehen. Ich werde also kurz erklären, was mongodb kann und nicht kann.

Mit mongodb können Sie keine Abfragen über mehrere Sammlungen (Tabellen) hinweg durchführen, daher können Sie mit reiner mongodb keine Joins durchführen. Daher ist @RelatedDocument ein Feature, das Spring Data bietet. Verwandte Dokumente können entweder eingebettet sein (ich weiß nicht, ob Spring Data dies unterstützt) oder können einige einfache DBRef zu einem Dokument in einer anderen Sammlung (und Datenbank) sein. Mit DBRef können Sie nur nach @RelatedDocument-Feldern wie _id, Sammlung und Datenbank suchen, nicht jedoch nach den tatsächlichen Eigenschaften der referenzierten Dokumente.

Das heißt, mongodb erlaubt es nicht, in einer einzelnen Abfrage über Datenbanken hinweg zu suchen, da Sie keine Abfragen über Sammlungen hinweg durchführen können. Die einzige Cross-Store-Funktionalität, die Sie haben, betrifft geshardete Sammlungen. Dabei wird Ihre Sammlung über mehrere Knoten durch einen Shardkey verteilt. MongoDB muss möglicherweise über alle Sammlungs-Shards eine Abfrage ausführen, um Ihre Abfrage zu erfüllen. Aber abgesehen davon, was ich tatsächlich nicht als eine Cross-Datenbank-Funktion bezeichnen würde, haben Sie keine solchen Möglichkeiten.

Wenn Ihnen das nicht hilft, erklären Sie bitte genauer, was Sie tun möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X