2017-11-09 1 views
0

Ich möchte riesige Binärdaten in einer Datenbank speichern. Clients sollten in der Lage sein, Metadaten wie Inhaltsgröße, Erstellungsdatum usw. zu überprüfen und den Inhalt zu streamen.So streamen riesige Daten von der DB zum Client

Mit JPA sind persistente Metadaten unkompliziert.

@Entity 
public class MyData { 
    @Id 
    private String name; 
    private Timestamp creationDate; 
    private long contentSize; 

Aber wie man den Inhalt modelliert? Wenn ich

byte[] content; 

dann der gesamte Inhalt im Speicher werden muß verwenden würde gehalten, was unerwünscht ist.

Mit Hibernate, die folgenden Werke, aber auch andere JPA-Provider, wie zB OpenJPA, beklagen, dass content weder persistent noch @Transient kommentiert.

@Lob 
@Basic(fetch=FetchType.LAZY) 
private java.sql.Blob content; 

Frage: Gibt es eine tragbare Lösung, die für das Streaming von ohne die Notwendigkeit ermöglicht es den gesamten Inhalt in einem Byte-Array zu halten?

+0

Tragbare? Nee. Nichts in der JPA-Spezifikation dafür. Alle JPA-Anbieter haben ihre eigenen unterstützten Typen und unterstützten Möglichkeiten, sie zu handhaben. Wie Sie sagen "Byte []" ist kein geeigneter Typ, aber auch nicht Blob, da es an einen vorhandenen JDBC-Treiber gebunden ist. Etwas wie Reader oder InputStream macht mehr Sinn ... wenn dein JPA-Provider sie unterstützt – DN1

Antwort

0

Nicht sicher, ob Sie JPA allein oder mit Spring verwenden. Wenn es mit Frühling ist, dann schauen Sie sich Spring Content an? Diese Bibliothek bietet eine Abstraktion für die Handhabung von Inhalten (einschließlich riesiger Inhalte, da die API auf Streams basiert), die über Storage hinweg übertragbar sind. RDBMS, Datei, S3, Mongo's GridFS. Im Fall von RDBMS ist es schwierig, den Stream speichereffizient zu verwalten, so dass Sie den Inhalt zurück zum rufenden Client (außerhalb einer geöffneten DB-Verbindung) streamen können. Könnte einen Blick wert sein.

Verwandte Themen