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
Seite 1 von 3  1 23      
Jackie1983

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

Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 10:25
Datenbank: - • Version: - • Zugriff über: -
Servus,

wir haben ein Programm was sehr viele Daten über Sockets bekommt. Diese müssen verarbeitet werden und geloggt. Zur Zeit wird in eine TXT geloggt.

Die log muss komplexer werden. Also habe ich verschiede DB-Systeme (embedded) ausprobiert.

Beim Test war SQLite recht schnell. Ohne Commit nur ein insert kommt man auf 10.000 inserts in 6 Sekunden.

Bei jedem insert müssen die Daten aber auch auf die Platte geschrieben werden. Das Commit braucht einfach zu lange. Da dauert eine Verarbeitung ca. 1 Sekunde, was viel zu lang ist.

Jetzt muss ich eine alternative finden, vielleicht habt ihr noch ideen...

gruß
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 10:35
Wieviel Einträge kommen den pro Sekunde?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 10:39
ADS ist schnell. Unterstützt aber keine Transaktionen im Embedded Modus. Auch muss man aufpassen ob man bei Verwendung nicht Serverlizenzen benötigt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 10:40
Das Commit braucht einfach zu lange. Da dauert eine Verarbeitung ca. 1 Sekunde, was viel zu lang ist.

Jetzt muss ich eine alternative finden, vielleicht habt ihr noch ideen...
Ist die Sekunde zu lang, weil dadurch der Hauptthread blockiert wird und daher keine Daten mehr ankommen?

In diesem Fall einfach die Datenbankoperationen in einen Thread auslagern (oder mehrere, jeweils mit einer Connection pro Client-Thread).

Und man kann die eintreffenden Daten erst mal in einer in-memory Queue speichern, um kurze Spitzenlasten abfangen zu können.

Sind es asynchrone Sockets, die die Haupt-Messageloop verwenden? Auch diesen Bereich könnte man in einen oder mehrere Hintergrundthreads auslagern, mit Indy oder Synapse und blockierenden Sockets wird es dann deutlich einfacher und performanter.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
jobo

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

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

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 11:14
Wieviel Einträge kommen den pro Sekunde?
Es kann eh nur eine Nachricht entgegen genommen werden. Wenn diese verarbeitet wurde wird die nächste angenommen. Morgens können schon mal 20.000 Nachrichten kommen. Diese dürfen sich dann aber nicht stauen und müssen alle der Reihe nach bearbeitet werden.

ADS?

Ist die Sekunde zu lang, weil dadurch der Hauptthread blockiert wird und daher keine Daten mehr ankommen?

In diesem Fall einfach die Datenbankoperationen in einen Thread auslagern (oder mehrere, jeweils mit einer Connection pro Client-Thread).

Und man kann die eintreffenden Daten erst mal in einer in-memory Queue speichern, um kurze Spitzenlasten abfangen zu können.

Sind es asynchrone Sockets, die die Haupt-Messageloop verwenden? Auch diesen Bereich könnte man in einen oder mehrere Hintergrundthreads auslagern, mit Indy oder Synapse und blockierenden Sockets wird es dann deutlich einfacher und performanter.
Es kann eh nur ein Auftrag entgegen genommen werden, siehe oben. Verwenden blockierende Sockets.

Kann die Daten aber auch nicht zwischenspeichern oder in einer Queue speichern. Wenn der Rechner abschmiert gehen eventuell 200 Einträge verloren.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 11:21
Zitat:
Zitat von mkinzler:
Wieviel Einträge kommen den pro Sekunde?
Es kann eh nur eine Nachricht entgegen genommen werden. Wenn diese verarbeitet wurde wird die nächste angenommen. Morgens können schon mal 20.000 Nachrichten kommen. Diese dürfen sich dann aber nicht stauen und müssen alle der Reihe nach bearbeitet werden.
20.000 in einer Sekunde?
Wie groß ist ein Eintrag?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 11:29
http://www.advantagedatabase.com
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Jackie1983

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

AW: Schnelle DB / Dateibasierend

  Alt 2. Feb 2012, 12:04
20.000 in einer Sekunde?
Wie groß ist ein Eintrag?
Nein Sorry falsch beschrieben. Diese kommen morgens verteilt.

Wie viele pro Sekunde genau kommen kann ich dir nicht sagen. Können bis zu 50 Nachrichten sein.
  Mit Zitat antworten Zitat
Jackie1983

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

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
Antwort Antwort
Seite 1 von 3  1 23      


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 12:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz