AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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, 20:45
Also das ist kein "Datenbanksystem" sondern nur etwas unstrukturierter Code mit dem man mehrere Records mit festgelegter Struktur in einer Datei speichern kann.
Das Speichern von Daten hat sich ja im Laufe der Zeit weiterentwickelt, aber dieser Code steht noch bei Phase 0.

Phase 0: Daten mit fester Satzstruktur werden einfach in eine Datei gespeichert
Phase 1: Die Datei bekommt einen Header, anhand dessen man die Version abfragen kann
Phase 2: Der Header wird erweitert um eine Liste mit Feldbeschreibungen (Feldname, Länge, Datentyp, Genauigkeit, Defaultwert)
Phase 3: Jeder Datensatz bekommt ein Löschkennzeichen, damit nicht bei jedem Löschen Megebytes an Daten kopiert werden müssen.
Phase 4: Die Software und das Datenformat wird standardisiert

Was ich hier mit Phase 0 bis 4 beschrieben habe sind die Minimalanforderungen die zum steinalten dBase-Format geführt haben.
  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, 20:56
Naja okay, ich gebe dir Recht. Es ging mir jetzt weniger darum dieses System zu verallgemeinern, also eine allgemeine Datenbank-Struktur zubauen.
Dieses System wollte ich nur verwenden, wenn ich nicht grad eine ganze Datenbank-Komponente oder irgendwelche andere Komponenten brauch um "Datensätze" (also einen Record oder anzahl von Bytes, die sich immer wiederholen. Halt eine Art Liste von Daten, mehr nicht.

Was aber an deinen Punkten interessant ist ist Phase 3.
Wie meinst du das? Wie würde das in einer Art Pseudo-Code aussehen?
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

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

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
 
#4

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
 
#5

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
 
#6

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


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 21:35 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