AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Messdaten in DB speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Messdaten in DB speichern

Ein Thema von iamjoosy · begonnen am 24. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
Seite 2 von 2     12   
iamjoosy

Registriert seit: 12. Nov 2003
53 Beiträge
 
#11

Re: Messdaten in DB speichern

  Alt 25. Nov 2005, 00:15
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.
Miniaturansicht angehängter Grafiken
scanpath_analysis_100.gif  
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#12

Re: Messdaten in DB speichern

  Alt 25. Nov 2005, 09:08
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.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
iamjoosy

Registriert seit: 12. Nov 2003
53 Beiträge
 
#13

Re: Messdaten in DB speichern

  Alt 25. Nov 2005, 09:14
Das würde aber mein Problem nicht lösen, dass während einer Datenaufzeichnung keine Festplattenzugriffe stattfinden sollen - siehe Erklärung oben.
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#14

Re: Messdaten in DB speichern

  Alt 25. Nov 2005, 09:19
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).
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#15

Re: Messdaten in DB speichern

  Alt 25. Nov 2005, 09:27
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:12 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