Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Messdaten in DB speichern (https://www.delphipraxis.net/57649-messdaten-db-speichern.html)

iamjoosy 24. Nov 2005 23:15

Re: Messdaten in DB speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
huups, Nachricht geschrieben und nicht abgeschickt, also hier nochmal:

@supermuckl & jelly

die Daten kommen von einem Eyetracker - ein sehr teures Gerät, mit dem man messen kann wo Menschen auf einem Bildschirm (oder sonstwo) hinschauen. Das ganze kann man z.B. für usability tests verwenden.
Da man da aber mit meheren Personen arbeitet ist die Verwaltung in einer richtigen DB mit Querys schon sehr wünschenswert.

Also nochmal: Mein problem ist, wie ich die daten aus dem Hauptspeicher möglichst schnell in eine lokale DB bekomme, damit ich später schön mit Querys etc damit arbeiten und meine Daten auswerten kann.

Eine, der Auswertungen habe ich mal hier angehängt.

joachimd 25. Nov 2005 08:08

Re: Messdaten in DB speichern
 
Zitat:

Zitat von iamjoosy
@Joachim

Deine Lösung wäre, sozusagen die Daten "im Hintergrund" abzuspeichern - das löst mein Problem nicht wirklich, da der Benutzer trotzdem warten müsste bis die daten geschrieben sind um dann eine neue Aufzeichnung starten zu können.

Warum? Du kannst doch eine neue Aufzeichnung in einem neuen Thread starten (neue Queue), gleichzeitig einen neuen Thread starten, der die Daten abspeichert (von der anderen Queue heraus) und Dein Benutzer kann richtig schön weiterarbeiten. Wenn Du dann nicht in eine Datei, sondern eine DB speicherst, so sollte das auch keine Probleme mit Deinem anderen Programm/Thread machen.

iamjoosy 25. Nov 2005 08:14

Re: Messdaten in DB speichern
 
Das würde aber mein Problem nicht lösen, dass während einer Datenaufzeichnung keine Festplattenzugriffe stattfinden sollen - siehe Erklärung oben.

joachimd 25. Nov 2005 08:19

Re: Messdaten in DB speichern
 
Zitat:

Zitat von iamjoosy
Das würde aber mein Problem nicht lösen, dass während einer Datenaufzeichnung keine Festplattenzugriffe stattfinden sollen - siehe Erklärung oben.

Doch. Wenn Du ein DBMS (sorry, vielleicht genauer: Client/Server DBMS) einsetzt, hast Du absolut keine Plattenzugriffe, sondern nur auf das Netzwerk. Auf der anderen Seite: Wie verhinderst Du, dass Windows nicht auf die Platte schreibt? Das geht m.W. überhaupt nicht (Stichwort Swapping).

trifid 25. Nov 2005 08:27

Re: Messdaten in DB speichern
 
Hallo,

ich würde folgenden Varinate vorschlagen
verwende ein TObjectList - das Item enthält die Messdatenstruktur (Datum, Zeit, Messnummer, Messwert1, Messwert2, etc.)
(das geht schnell und man kann es auch threadsicher programmieren)
(oder doch eine TStringListe - da musst du mal Zeitmessungen machen)
Nach dem Mess-Ende diese Liste in einen File ablegen
Anschließend die Datei über einem "bulk copy" in die MSDE reinladen mit dem Tool bcp.exe
(das geht auch wieder fix, wenn die Dateistruktur gleich der Tabellenstruktur ist)

Wenn du Multithreading verwendest möchtest , könntest du beides gleichzeitig anwenden und "nonstop" Messreihen fahren
1ter Thread nimmt Messung auf und legt die Daten in die TObjectList/TStringList
2ter Thread verwaltet die Messreihen und erzeugt in 1000er oder 10000er die Datei
3ter Thread verwaltet das Löschen der Objectlist bereits übertragener Daten (dafür brauchst du ein Löschkennzeichen im Item)
4ter Thread führt den "bulk copy" durch

Ich würde mich nicht mit ADO oder der MSAccess abgeben (weil die Schnittstelle zu langsam ist), eher würde ich
eine DBase (.dbf) Datei verwenden wo gleich die Messdaten reingeschrieben werden
(weil dies einfach mit DBase schneller geht)
( nicht über die BDE ((da ist auch zuviel zwischen drin)) eher http://sourceforge.net/projects/tdbf)
(nebenbei, viele Industrieschnittstellen verwenden DBase als Datenbankaustauschformat, weil es einfach, schnell und netzwerktauglich ist)
wenn's mit "ADS Advantage Local Server" geht, soll es genau so gut sein (wichtig ist, das die Abtastung von 8ms erhalten bleibt)
Anschließend die Daten in einen SQL-Server deiner Wahl importieren - für eine komfortable und schnelle Auswertungsmöglichkeit

Einen Ringbuffer wie hier vorgeschlagen würde ich nicht empfehlen, da du nie weißt ob die Daten überrollt werden
Außerdem ist die Verwaltung von einem Ringbuffer auch nicht ganz ohne - wenn gleichzeitig 2 Prozesse lesend oder schreiben darauf zugreifen
Eine eigene Datenbank macht wenig sinn, weil es genügend Alternativen für dein Problem gibt


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr.
Seite 2 von 2     12   

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