AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Schnelle DB / Dateibasierend
Thema durchsuchen
Ansicht
Themen-Optionen

Schnelle DB / Dateibasierend

Ein Thema von Jackie1983 · begonnen am 2. Feb 2012 · letzter Beitrag vom 6. Feb 2012
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 11:02
Hallo,

falls es noch um das gleiche Thema geht wie neulich. Hier ein nochmal mein Hinweise zu SQLITE und Transaktionen, falls Du das übersehen hast.

http://www.delphipraxis.net/1144412-post11.html

Besorg oder compilier dir eine Version ohne Journaling und Transkationshandling. Brauchst Du ja für s Logging nicht, oder?
Gruß, Jo
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#2

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 12:07
Hallo,

falls es noch um das gleiche Thema geht wie neulich. Hier ein nochmal mein Hinweise zu SQLITE und Transaktionen, falls Du das übersehen hast.

http://www.delphipraxis.net/1144412-post11.html

Besorg oder compilier dir eine Version ohne Journaling und Transkationshandling. Brauchst Du ja für s Logging nicht, oder?
Sorry deine Nachricht habe ich übersehen. Ja es geht noch um das gleiche Thema.
Nein das brauche ich nicht.....
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 13:19
20000 am Morgen?
das sind dann über den ganz dicken Daumen 3000 pro Stunde. Da ein Stunde aber 3600 Sekunden hat, sollte eine Transaktion pro Sekunde reichen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#4

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 14:29
20000 am Morgen?
Jup. Das heist für eine Nachricht eine Sekunde
20.000 Nachrichten = 20.000 Sekunden = ca 5 Stunden bis die letzte bearbeitet wurde.

Und in der Zeit stauen sich neue Nachrichten an.
Also zulangsam....
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 15:36
Man könnte aber auch eine NoSQL Datenbank wie z.B. CouchDB verwenden.
Dabei muss man aber ganz neue Dinge lernen.
Von der Performance und der Flexibilität her ist so etwas aber sehr interessant.
Andreas
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#6

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 16:09
Jup. Das heist für eine Nachricht eine Sekunde
20.000 Nachrichten = 20.000 Sekunden = ca 5 Stunden bis die letzte bearbeitet wurde.

Und in der Zeit stauen sich neue Nachrichten an.
Also zulangsam....
Das Speichern kann immer "zu langsam" sein, auch wenn die DB pfeilschnell arbeitet: Fehler in der Netzwerkverbindung, Windows Update, Virenscanner, DB Maintainance etc.

Um auf der sicheren Seite zu sein, kann eine "2-Phasen-Persistenz" helfen: Einkommende Nachrichten werden zuerst lokal gespeichert (z.B. in einer Log-Datei), um anschließend von dort in die DB übertragen zu werden. Das hat u.a. den Vorteil, dass das transaktionsbasierte SQL-Insert im "Bulk-Mode" wesentlich schneller abläuft, als wenn jeder einzelne Insert commited wird. Beide Prozesse sollten natürlich als Threads oder in getrennten Services/Programmen ablaufen.

Fällt der Client aus, so kann aus der lokalen Log-Datei jederzeit die Übertragung wieder aufgenommen werden.

Dieses Szenario hat sich z.B. bei BDE-Nachrichten-Verarbeitung über viele Jahre hinweg als robust und performant erwiesen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 16:41
Genau das soll es ja nicht sein,
da die Einträge in die Log-Datei komplexer werden, -was bedeutet das eigentlich?-
soll jetzt in eine DB geschrieben werden.
Mein Schluß daraus, eine Datei zum Vortschreiben der Log-Ereignisse ist untauglich.
(nur verstehen tu ich's nicht)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#8

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 17:00
Genau das soll es ja nicht sein
Sorry, ich habe mich da nicht ganz klar ausgedrückt.

Der erste Prozess schreibt z.B. 10 oder 100 Nachrichten in eine Datei 0001.txt, die nächsten 10 oder 100 in 0002.txt usw. Der 2. Prozess liest 0001.txt, wandelt sie in ein SQL-Script mit Inserts und führt sie aus. Anschließend löscht Prozess 2 0001.txt und macht mit 0002.txt weiter.

Damit mache ich mich bei der Übernahme der Daten unabhängig von deren Weitergabe.

Zur Phase 2: 1000 Datensätze en-bloc sind in eine Firebird-Datenbank in wenigen Sekunden eingefügt, wenn da keine großartigen Trigger etc. mitlaufen. Damit wird die Übernahme von 20000 Datensätzen ein Minuten-Job.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.745 Beiträge
 
Delphi 12 Athens
 
#9

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 18:39
Wobei man die ankommenden Daten auch in eine Queue schieben kann. Also analog zu den LogTemp-Dateien.
Dieser Queue/Zwischenspeicher wird dann einfach regelmäßig/kontinuierlich geleert und in die DB übertragen.
Sozusagen alles im RAM, anstatt erst über die HDD zu gehn.

OK, wenn der Rechner, bzw. das Programm abstürzt, dann sind die in der Cache befindlichen Daten natürlich weg,
aber auch diese Temp-Dateien können nach einem Absturz korrupt sein.

Kommt also mehr darauf an, wieviel Zeit der Zwischenspeicher überstehen soll.
- länger und öfters > Datei
- nur kurze Spitzen abfangen > RAM
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Feb 2012 um 18:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.745 Beiträge
 
Delphi 12 Athens
 
#10

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 15:51
Eventuell statt einem Insert auch mal über ein Append nachdenken.
(hier bei einem MemDataSet dauerte DS.Insert+DS.Post wesentlich länger, als DS.Append+DS.Post)


Privat versuche ich mich grade an Firebird-Embedded zu gewöhnen.
Ein Therapeut entspricht 1024 Gigapeut.
  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 20:29 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