AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Datenbank auf Streambasis

Ein Thema von NickelM · begonnen am 3. Mär 2012 · letzter Beitrag vom 5. Mär 2012
Antwort Antwort
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Datenbank auf Streambasis

  Alt 3. Mär 2012, 21:12
Jeder Datensatz bekommt ein Löschkennzeichen ganz am Anfang vor den eigentlichen Nutzdaten.
' ' bedeutet Daten sind gültig; '*' bedeutet Datensatz wurde gelöscht.
Die gelöschten Datensätze bleiben an Ort und Stelle in der Datei erhalten.
Man benötigt dann noch eine Restrukturierungsfunktion, die die Datei quasi defragmentiert.
Man kann z.B. alle Datensätze die nicht gelöscht sind in eine neue Datei kopieren.
Es ist auch möglich die Datensätze in der Orginaldatei zusammenzuschieben und zum Schluss die Datei zu verkürzen.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Datenbank auf Streambasis

  Alt 3. Mär 2012, 21:40
Es ist auch möglich die Datensätze in der Orginaldatei zusammenzuschieben und zum Schluss die Datei zu verkürzen.
Naja dies mache ich ja eigentlich. Aber ich schieb die Datei direkt nach jedem Löschen zusammen, um sicherzustellen, dass alles übernohmen wird. Weil dies System soll eine Art Live-"Datenbank" sein.
Jede Änderung, ob neuer Datensatz, Änderungen, Löschungen. Dies sollte der Sinn und Zweck dieses Systems sein. Aber vielleicht mache ich auch mal ein allgemeines System.

nunja zurück zum Thema. Könnte man noch irgendwelche Vorgänge optimieren, was z.b. Datei als Speicherabbild, und zum ändern Datei öffnen, und Daten ändern, wieder Datei schliessen betrifft.
Oder ist dies schon so optimal? Ich weis das neuere Rechner ja schnell sind, es geht halt auch darum, wenn ich mal das System verallgemeiner als "richtiges" Datenbank-System, ob dies dann auch noch so optimal ist.

Hört sich doff an, aber es geht sozusagen um die Optimierung die Datei auf den aktuellsten Stand zuhalten und trotzdem den Speicher/Arbeitsspeicher/Prozessor nicht zusehr auszulasten. Ich gehe da von Rechnern aus mit z.b. 500 Mhz, ca. 300 MB-RAM. Oder denk ich da "zu optimal"?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Datenbank auf Streambasis

  Alt 4. Mär 2012, 09:20
Jeder Datensatz bekommt ein Löschkennzeichen ganz am Anfang vor den eigentlichen Nutzdaten.
' ' bedeutet Daten sind gültig; '*' bedeutet Datensatz wurde gelöscht.
Die gelöschten Datensätze bleiben an Ort und Stelle in der Datei erhalten.
Man benötigt dann noch eine Restrukturierungsfunktion...
Das Löschkennzeichen kann man auch erweitern, indem man die gelöschten Records wie in einer linked List miteinander verknüpft: Steht eine 0 drin, ist der Record in Verwendung, jede andere Zahl bezeichnet die Recordnummer des nächsten gelöschten Records.

Wenn man nun den Index des ersten gelöschten Records kennt (den man z.B. im Dateiheader abgelegt hat), dann kann man die Operation "Gib neuen Recordindex" sehr einfach und schnell implementieren. Das Löschen eines Records würde zudem bedeuten, das der Record einfach vorne in die verkettete Liste eingefügt wird.

Auf diese Weise degeneriert so eine Datei im laufenden Betrieb nicht.

Dessenungeachtet würde ich die Aufgabe "Speichern eines Array of Record" eher mit ORM realisieren.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Datenbank auf Streambasis

  Alt 5. Mär 2012, 14:51
Dieser Ansatz?
Delphi-Quellcode:
type
  TMeinRecord = record
  public
  type
    TDateidaten = record
      { ... }
    end;

  public
    Datei: TDateidaten;
    { ... }
  end;

  TMeineListe = class(TList<TMeinRecord>)
  public
    procedure LoadFromFile(const Filename: String);
    procedure LoadFromStream(const Stream: TStream);
    procedure SaveToFile(const Filename: String);
    procedure SaveToStream(const Stream: TStream);
  end;
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz