Frage

Was ist der effizienteste Weg, um großen Arrays (10000x100) in einer Datenbank zu speichern, sagen sie, hsqldb? Ich brauche dies für ein bestimmtes Mathematik-Programm zu tun, die ich in Java mich schreibe. Bitte helfen. Die gesamte Anordnung wird oft abgerufen und gespeichert werden (nicht so sehr einzelne Elemente). Auch einige Meta-Daten über das Array muss über das Array gespeichert werden.

War es hilfreich?

Lösung

Gute Frage.

Wenn Sie Ihre Arrays in einen Satz von normalisierten Tabellen zu übersetzen, die es wie Sie nicht klingt, könnte man Serialisierung betrachten möchten.

Serialisierung ist ein ausgefallenes Wort Objekte in einem gewissen Format für das Drehen, die Sie auf die Festplatte oder einer Datenbank zu speichern. Die beiden wichtigsten Formate für die Serialisierung sind binäre und XML, und ich wette, dass Java eine gewisse Unterstützung für sie hat.

Je nachdem, welche Datentypen, die Sie verwenden, sollten Sie in der Lage sein, Ihr Array in XML oder binär zu drehen und dann, dass in der Datenbank auf ein einzelnes Feld zu speichern. Sie könnten, indem Sie sich mit dieser Technik in Java beginnen http: //java.sun. com / Entwickler / technicalArticles / Programmierung / Serialisierung / . Ich weiß, dass es in .NET integriert ist.

Ich hoffe, dass das hilft. Lassen Sie uns wissen, wenn ich Ihnen nicht mehr Richtung geben kann.

Andere Tipps

Wie sei es die Daten als BLOB Speicherung und Verwendung von Java das BLOB in ein tatsächliches Java-Array zu entschlüsseln? Es wäre in einem Zug viel effizienter zum Speichern und Abrufen der gesamten Array sein, würde aber für twiddling einzelnen Elemente schrecklich sein.

mit einer internen Darstellung Kommen Sie -. Sei es XML, JSON, einige binäre Datei, die Sie mit sich selbst kommen, oder jede andere Form von Serialisierung

Bewahren Sie es in einer Tabelle des „Blob“ Datentyp verwenden. Bewahren Sie alle Metadaten mit der Matrix in zusätzlichen Spalten verbunden sind.

Ich bin nicht einverstanden stark, dass der Weg, es zu tun ist, eine Tabelle mit der gleichen Anzahl von Zeilen und Spalten als Matrix zu schaffen -., Dass ein sehr hoher Preis, den Sie für die Funktionalität zu zahlen nicht verwenden

Planen Sie Ihre insert / select-Anweisungen im Voraus, und binden Variablen zu ändern, welche Matrix Sie arbeiten -. Machen Sie nicht den db reparse jede Anfrage

Wenn sein nur 1-Array ist, warum nicht eine binäre Datei verwenden?

Wie allready vorgeschlagen: Sie einen RDBMS nicht verwenden, wenn Sie die Eigenschaften nicht benötigen. Statt Serialisierung wenn Sie einen niedrigen Level-API concider möchten wie JDBM , die einige Datenbank ähnliche Funktionen bietet wie die Verwaltung ein on-Disk-Index.

Wenn Ihre Daten dicht gepackt sind (die Werte Histogramm ist in der Nähe flache Linie), die beste Wahl ist Blob und Serialisierung mit Object [Output / Input] Strom.

Ansonsten könnten Sie finden es effizienten spärlichen Arrays und Variation von Entity-Attribute-Value-Schema zu verwenden. Hier ein Beispiel:

 Name | IndexKey  | Value
------+-----------+-------
 foo  | 'default' | 39        
 foo  | 0:0:0     | 23
 foo  | 0:0:1     | 34
 foo  | 1:5:0     | 12
 ...
 bar  | 1:3:8     | 20
 bar  | 1:3:8     | 23
 bar  | 1:1:1     | 24
 bar  | 3:0:6     | 54
 ...

Auf diese Weise können Sie auch eine schnelle Updates auf Teile der Tabelle und Auswählen von Slices SQL ‚wie‘ Operator.

Wenn die Anzahl Ihrer Dimensionen festgelegt wird, um die Schlüsselspalt zu brechen int Spalten für jede Dimension zu trennen, um den Index Effizienz und haben flexiblere Auswahlkriterien zu verbessern (können Sie ersten Index ‚null‘ für Metadaten verwenden, wie die Standardwert).

In jedem Fall ist es eine gute Idee, einen gruppierten Index für Namen, IndexKey Spalten zu erstellen.

Definieren Sie eine Tabelle mit den Daten Ihrer Array enthält und die Array-Werte in eine Tabelle einfügen.

Dies ist sehr einfach Datenzugriff / Lagerung. Ihre Array-Dimensionen immer gleich sein?

  • Sie es in einer großen expliziten Transaktion. Nicht das Datenbanksystem zwingen, eine neue implizite Transaktion für jeden Einsatz zu schaffen.
  • Verwenden Sie eine vorbereitete Erklärung.

PostgreSQL hat eine integrierte Unterstützung für Arrays.

http://www.postgresql.org/docs/8.0/interactive /arrays.html

Java Serialisierung zu einem Byte-Array gespeichert, wie ein BLOB die beste Wahl sein wird. Java wird sehr effizient ein großes Array serialisiert. Verwenden Sie den Rest der Zeilen-Spalten für alles, was Sie in der Abfrage interessiert sind, auf oder das Anzeigen leicht. Es kann auch eine gute Idee sein, den BLOBs in ihrem eigenen Tisch zu halten und hat die „normalen“ Zeilen zu den „BLOB“ Zeilen zeigen, wenn Sie viel auf den Nicht-BLOB-Daten abzufragen und melden (obwohl dies von Datenbank-Implementierung variieren kann ).

HSQLDB 2.0 unterstützt eindimensionalen Arrays als eine Spalte der Tabelle gespeichert. So wird jede Zeile der Tabelle auf eine Zeile des 2D-Arrays entspricht.

Aber wenn Sie einen 2D-Array als Ganzes retreive wollen, BLOB ist die beste Lösung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top