Frage

Ich mag ein großes Ergebnis aus der Datenbank im Speicher gesetzt speichern. Jeder Datensatz hat eine variable Länge und Zugriffszeit muss so schnell wie Arrays sein. Was ist der beste Weg, dies zu implementieren? Ich dachte an Versetzungen in einer separaten Tabelle zu halten und nacheinander alle Datensätze zu speichern? Ist es seltsam? (Programmiersprache: Delphi)

War es hilfreich?

Lösung

Nicht sicher, ob ich völlig folgen, sondern haben einen Blick auf TList.

In Delphi 7 zumindest wird es als arrary von Zeigern implementiert. Sie können die Kapazität Eigenschaft verwenden, um die Liste vor der Zeit im Voraus vergeben, wenn Sie wissen, wie viele Ergebnisse kommen zurück.

Die Liste wird automatisch wachsen, wenn es der Platz ausgeht. Wie viel es wächst durch hängt davon ab, wie groß die Liste ist.

Werfen Sie einen Blick auf die Quelle für die Klassen-Einheit, um zu sehen, was es tut.

Edit:. Auch in D2009 Genric Unterstützung wurde TList hinzugefügt, die es ein bisschen schöner zu bedienen ist

Andere Tipps

Der beste Weg ist wahrscheinlich ein Array von Zeigern auf Datensätze enthalten. Sie werden nicht mit Offsets, in diesem Fall zu tun haben, und Lookups konstante Zeit sein.

Warum nicht eine MEMORY-Version Ihrer Datenbank verwenden? Die meisten haben einen Weg, um eine vollständige Tabelle im Speicher zu halten, in der Regel des SQL-Schlüsselwort MEMORY beteiligt ist. Sie würden die Tabelle von der Festplatte auf die Speichertabelle kopieren und dann alle normalen Datenbankoperationen auf die Speichergeschwindigkeit nutzen können. Ich weiß, das funktioniert gut in DBISAM.

Im Anschluss an mj2008 Sie eine TClientDataSet statt einer Rekord Array nutzen könnten. Wie groß ist, dass resultset?

Ich würde verwenden TList, und speichern Zeiger auf Ihrer Platte.

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top