Zum Inhalt springen

Möglichst hohe Performance für Datenbankoperationen


SebastianJu

Empfohlene Beiträge

Hallo,

ich habe eine Anfrage erhalten in dem es um die automatisierte Prüfung von gefertigten RFID-Chips geht.

Die Aufgabenstellung ist, dass die Chips automatisch auf Funktion geprüft werden sollen. Da industrielle Fertigung natürlich hohe Geschwindigkeiten erfordert braucht es da eine hohe Performance. Im Moment wird die Prüfung durch eine reine Access-DB durchgeführt.

Nun soll es darum gehen das Ganze schneller zu machen. Access ist dazu sicher nicht optimal geeignet. Und so ist die erste Frage welche Software dazu am Besten benutzt werden sollte.

Als Basis wäre sicher der SQL-Server eine gute Wahl nehme ich an. Nun geht es noch darum ein möglichst gutes und schnelles Frontend zu finden.

Was würdet ihr da in dem Bereich empfehlen?

Auf welche Weise die Chips getestet werden weiß ich nicht. Da es über Access funktioniert nehme ich an dass es eine entsprechende einbindbare ActiveX oder sonstwie ähnliche Komponente gibt.

Leider bin ich erst nächste Woche mittwoch wieder da.

Was würdet ihr in dem Bereich empfehlen?

Freundliche Grüße!

Sebastian Jurk

Link zu diesem Kommentar
Auf anderen Seiten teilen

MIt anderen Worten hast du keine Ahnung von deinem vorhandenen System und triffst die Auswahl für eine Datenbank weil es sich gut anhört so ein SQL-Server?

Also nachdem die Ist-Analyse ausgefallen ist, erstellen wir das Sollkonzept aufgrund von "da hab ich mal was von gehört".

Viel Glück!!!

Wenn du die Frage hast, welches das richtige System für deine Applikation ist, so solltest du mal definieren was du hohe Performance nennst.

5 Datensätze pro Sekunde oder 5 Mio Datensätze pro Sekunde???

Brauchst du Transaktionssicherheit oder kann auch asynchron gearbeitet werden usw....?????

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn die anlage, wie sie jetzt läuft, dies auch in adäquater zeit tut:

don't touch a running system :)

mal ernst: ist es nicht einfacher in access mal eben reports und formulare zu erstellen, als den ganzen kram auf nen sql server zu packen? wie schon erwähnt ist natürlich der datendurchsatz wichtig. bei nem fluss von mehreren hundert datensätzen pro sekunde brauchste nen ordentliches system - ohne access *g

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also... das Ganze ist nicht mein System. Im Moment habe ich erstmal nichts außer zwei Mails. Von Datenbanken habe ich an sich schon Ahnung aber ich wollte mir halt mal Tips holen was in dem Bereich industrielle Datenbanken so benutzt wird. Es geht halt wie gesagt um ein Prüfsystem. RFID-Chips in Rollen müssen auf Funktion überprüft werden...

Der Firmenchef hat nun auf Rückfrage auch noch ein paar weitere Daten genannt. Es gibt bereits ein Frontend welches mit visual c++ programmiert ist. Dann über ein ActiveX-Element auf die Testmaschine zugegriffen und per ADO auf die Access-Datenbank. Und angezeigt wird da wohl auch noch per DataGridControl...

Im Grunde scheint mir das schon eine gute Lösung bis auf das Access.

Der Firmenchef wünscht sich eine perfomantere Lösung. Dazu fällt mir eben im Moment ein dass Access sicher nicht die Lösung dafür ist. Und der SQL-Server sollte da die beste Möglichkeit sein. Da ich mir aber unsicher bin ob in dem Bereich nicht doch noch andere Sachen verwendet werden frage ich hier nach...

ActiveX muss wohl bleiben. ADO ist sicherlich auch gut genug. c++ ist schnell.

Ich vermute allein die Umstellung auf SQL-Server würde schon den gewünschten Effekt bringen. Danach könnte man nachsehen ob da irgendwie weiter optimiert werden kann. Indizes sind klar, eventuell könnten Datenbankeinträge gesammelt werden und so schneller geschrieben und gelesen werden. Außerdem könnte es auch im Datagridcontrol hängen schätze ich. Falls die Sache so programmiert wurde dass nichts geprüft wird solange das Datagrid nicht aktualisiert ist. Usw... Da könnte man zB auch noch schauen ob da etwas zusammenfassbar ist usw usf...

Noch andere Ideen? Wie gesagt habe ich bisher noch keine weiteren Infos.

Grüße!

Sebastian

PS: Es war die Rede von Rollen von Tausenden von Chips die auf ihre Funktion hin geprüft würden... Also nehme ich an dass das eine Massenware ist und dementsprechend schnell von Statten gehen muss...

Link zu diesem Kommentar
Auf anderen Seiten teilen

das ist das, was ich als gutes fundament für deine arbeit betrachten würde :)

das c++ programm arbeitet ja mit schnittstellen. ich würde mal testweise einen sql-server aufsetzen und das programm an die sql-datenbank die du dann generieren musst anbinden. danach ist die arbeit ja schon getan. wenn das c++ programm die daten bekommt und in die db schreibt, musst du nur diese komponente ändern.

was du im punkto performance machen kannst, ist die datenbankdatei zu splitten. so kann das datenbankmanagementsystem schneller daten lesen und schreiben, als wenn es 20gb große dateien verwalten muss muss.

und scsi raid 0+1 & 64kb clustersize :D

problem is wirklich, dass du, wenn du solche datenmengen auffangen musst, den insert ja nicht wirklich optimieren kannst. nur die datenauswertung kannste performant gestalten indem da gescheite selects gefahren werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann bist du der Meinung dass es eher nur an der Access-Datenbank liegt dass sie mehr Performance brauchen?

Aufteilung der Daten... Würde das dann über einen zeitgesteuerten Job laufen der die Tabellendaten von der aktuellen in die Archivtabellen verschiebt?

Also ich hatte ihm jetzt kurz gefasst geschrieben:

Access ist Hemmnis.

Falls langsame Speicherchips in Testmaschine dann könnte schon da ein Problem sein.

Das DataGridControl bzw die Ausgabe da hinein sollte mal abgeschaltet werden zum Test.

Und nach der Umstellung auf Access könnte noch mit Indizes und mit zusammenfassen von Inserts und Abfragen Geschwindigkeit erreicht werden...

Das fiel mir als mögliche Dinge ein die man dort als Performancenachteil erkennen könnte...

Grüße!

Sebastian

Link zu diesem Kommentar
Auf anderen Seiten teilen

es kann daran liegen. ich weiß ja weder wie der server physikalisch aussieht, welche version von access, wie die datenbankstruktur aussieht, wie die inserts aussehen...

es ist schwer zu beurteilen.

faktum ist: ein ms sql server kann sehr viel besser mit großen datenmengen in beide richtungen umgehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn mir jemand dem ich einen Auftrag erteilen will eine solche Anwort schicken würde, würde ich den Kontakt wegen fehlender Professionalität abbrechen.

Du willst also einen SQL-Server aufbauen (was ja kosten verursacht) um dann mal zu schauen. Danach willst du im SQL-Server ein bischen optimieren.

Wenn es danach immer noch nicht schnell genug ist, tauscht man also die Hardware aus und setzt einen neuen SQL-Server auf einer neuen Hardware auf (was Kosten verursacht).

Wenn man dann feststellt das die Performance nicht reicht????

Naja, dann macht man sich von vorne Gedanken (was wieder Geld kostet)....

Vielleicht meint der ja mit Perforamant einen Durchsatz den der SQL-Server gar nicht erfüllen kann???

Man weiß es nicht und man scheint es auch nicht wissen zu wollen????

Dein Ziel ist noch im Nebel!!! Stell die Fragen was er haben will!! Nur dann kann auch dein ERFOLG beurteilt werden.

Und solche Tipps wie Datenfile splitten sind hier kontraproduktiv. Solche Tipps helfen, wenn die Frage ist, das man eine Datenbank hat und diese bleiben soll und es soll das "letzte" rausgeholt werden. Wenn die hier gestellten (nicht klaren) Anforderungen jedoch nur erfüllt werden, wenn man das "letzte" aus dem SQL-Server rausholt, so würde ich gleich eine schnellere Datenbank wählen!!!

P.S. Was würdest du machen, wenn der Auftraggeber die Zahlung nach dem Projektende verweigert, weil seine Anforderung (ganz performant) nicht erfüllt sind? Wie würdest du beweisen, das das doch performant ist? Was ist den eigentlich performant? Das ist relativ!!! Also musst du es konkretisieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

c++ ist schnell.

Du kannst auch in c++ Code schreiben der mit der performantesten DB die du dir nur vorstellen kannst ewig lange braucht. :rolleyes:

Dann bist du der Meinung dass es eher nur an der Access-Datenbank liegt dass sie mehr Performance brauchen?

Access ist kein wirkliches DBMS. Beim Zugriff auf eine Access mdb wird nicht nur das abgefragt, was du haben willst, sondern es wird (praktisch) die komplette Datei übertragen. Das liegt daran, dass es kein DBMS gibt was zwischen dir und den Daten sitzt. Dein Programm steuert den Zugriff auf die MDB und dazu müssen eben viel mehr Daten der Datei übertragen werden.

Das ist (hab es jetzt nicht probiert, nur eine Einschätzung) zu vernachlässigen, wenn die Anwendung auf den selben Rechner liegt wie die mdb, sobald das aber nicht der Fall ist, ist die Verbindung zur mdb der Flaschenhals.

Insgesamt ist eine wirkliche DB aber Access auf jeden Fall vorzuziehen (Ich mag Access überhaupt nicht ;) ).

Wir hatten eine verteilte Anwendung mit Access im Hintergrund. Allein das Programm im Leerlauf hat schon (nur 1 Instanz auf 1 Rechner) über den Tag verteilt mehrere GB an Traffic verursacht (mdb ca. 45 MB groß).

Bei einem DBMS frägst du nur die Daten an die du willst und bekommst auch nicht mehr. Die Verwaltung und alles übernimmt ja der DB-Server.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mme, ich wurde erstmal nur gefragt was für Komponenten ich empfehlen würde. Und deswegen schreibe ich ihm was er da tun kann. Und selbstverständlich muss er erst einmal herausfinden wo das Problem liegt. Ich habe mit c++ eigentlich keine Erfahrung, könnte da also praktisch eher nur was machen wenn ich es während des Bearbeitens lerne oder gebe ihm halt einfach Tips wie es von meiner Sicht aus aussieht. Und er hat mich halt gefragt... Ich weiß nicht mal ob es da überhaupt ein Projekt gibt oder ob das nur mal eine Frage sein soll. Und Bayern ist auch ziemlich weit weg von Braunschweig. Von einem Projekt was ich habe kann also praktisch keine Rede sein...

Und dass ich ihm nun irgendwas falsches gesagt hätte glaube ich nicht...

Grüße!

Sebastian

Link zu diesem Kommentar
Auf anderen Seiten teilen

Derjenige der seine Datenbank verbessern will hat nun einige Tests gemacht.

"Flaschenhals scheint einerseits die grundsätzlich langsame Geschwindigkeit von Access bei großen Datenbanken zu sein (>10.000-100.000 Records). Ihre Vermutung Richtung MS Data Grid ist richtig; es bremst den Zugriff gewaltig. Die Visualisierung zumindest eines Teils der Datenbank ist allerdings notwendig, um den Überblick für den Bediener zu sichern. Gibt es hier vielleicht schnellere Alternativen zur MS-Variante? Wichtig sind ausschließlich funktionelle Aspekte. Ob man das Ding in 5 Farben blinken lassen kann, ist völlig belanglos."

Ich hatte ihm geraten das MS-DataGrid bzw deren Nutzung mal testweise abzuschalten. Nun ist die Frage braucht es da eine Alternative und welche Alternative gibt es zu diesem Steuerlement oder liegt es eher an der Programmstruktur?

Ich weiß gerade nicht wie das Steuerelement aufgebaut ist. Da es das System ausbremst scheint es ja wohl so zu sein dass zB Datensätze die eingelesen werden die Ausführung des Programmcodes aussetzen würde.

Wenn das so ist dann wäre wohl eine Möglichkeit nur wenige Daten auf einmal einzulesen und weitere danach. So dass in den Pausen der Code weiter ausgeführt werden könnte. Das hätte aber den Nachteil dass die angezeigten Daten vermutlich nicht sehr aktuell wären.

Besser wäre sicherlich ein Element welches irgendwie jenseits des Programmcodes arbeiten würde. Man zB einen Befehl ausgibt diese und jene Datensätze einzulesen und das Steuerelement läd simultan die Datensätze ein während der normale Code weiterläuft. Oder?

Gibt es da eine bessere Alternative?

Grüße!

Sebastian

Link zu diesem Kommentar
Auf anderen Seiten teilen

...und das Steuerelement läd simultan die Datensätze ein während der normale Code weiterläuft.

Das nennt sich eine Multi-Threading Anwendung. Das hat nichts mit dem Steuerelement selbst zu tun, sondern ist einfach so. Damit die Daten im Hintergrund geholt werden, muss das in einem eigenen Thread geschehen.

Und das macht auch nicht das DataGrid, sondern die Query-Komponente (keine Ahnung wie genau die bei MS heißt) mit der das DataGrid irgendwie verbunden ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...