Hallo,
für einen CAN-Sniffer (wem das nichts sagt, ist sowas für CAN wie Ethereal für Ethernet) schreibe ich gerade eine Software, die alle Datenpakete in einer Tabelle auflistet... da die maximale Datenrate aber bis zu 1 MBit beträgt können sehr schnell sehr viele Daten zusammenkommen.
Jede Nachricht besteht aus einer ID und Nutzdaten, die ID könnte man im weitesten Sinne wie eine IP-Adresse sehen.
Die Daten sollen wenn möglich folgendermaßen dargestellt werden:
* Mehrere Pakete mit der gleichen ID werden gruppiert dargestellt, optimal wäre eine aufklappbare Ansicht wie bei einem JTree - in der Summenzeile stehen Informationen, wie viele Pakete empfangen wurden und der zeitliche Abstand zwischen dem aktuellen und dem davor, wenn man die Ansicht aufklappt sieht man alle dazugehörigen Pakete mit der Ankunftszeit und weiteren Informationen
* Alternativ dazu sollte man umgruppieren können, also statt der Gruppierung nach der ID beispielsweise nach der Anzahl der Nutzdaten-Bytes gruppieren
* Optimal wäre auch eine Sortierung nach verschiedenen Kriterien, beispielsweise Zeit, ID, Daten, wobei in diesem Fall die Gruppierung wohl abgeschaltet werden sollte
Nun ist das erste Problem: Wie werden die empfangenen Daten am besten gespeichert? Einerseits könnte ich alle Daten in einer LinkedList speichern, wie ist das dann allerdings mit der Performance beim Auslesen und Sortieren? Und wie ließe sich eine Gruppierung bewerkstelligen?
Andererseits habe ich darangedacht, eine Datenbank im RAM zu erstellen (z.B. HSQLDB) und die die Sortierung bzw. Gruppierung machen zu lassen, aber bringt das wirklich Vorteile in der Performance? Imho arbeitet die DB ja nicht mit Zeigern, deswegen würden wohl alle Datensätze zurückgegeben werden, dürfte dann wohl egal sein ob ich die Daten aus einer Datenbank oder LinkedList bekomme oder? Dann wäre wohl die Sortiermöglichkeiten der DB der einzige Vorteil, sehe ich das richtig?
Ich würde mich freuen, wenn ich ein paar Tips bekommen könnte, da ich in Sachen Performance nicht so wirklich viel Erfahrungen habe... und genau, da die Daten fortlaufend eintreffen, sollten die natürlich optimalerweise auch immer gleich eingefügt werden... ausser das geht gar nicht, also on-the-fly einsortieren, dann muss ich mir was anderes überlegen...
für einen CAN-Sniffer (wem das nichts sagt, ist sowas für CAN wie Ethereal für Ethernet) schreibe ich gerade eine Software, die alle Datenpakete in einer Tabelle auflistet... da die maximale Datenrate aber bis zu 1 MBit beträgt können sehr schnell sehr viele Daten zusammenkommen.
Jede Nachricht besteht aus einer ID und Nutzdaten, die ID könnte man im weitesten Sinne wie eine IP-Adresse sehen.
Die Daten sollen wenn möglich folgendermaßen dargestellt werden:
* Mehrere Pakete mit der gleichen ID werden gruppiert dargestellt, optimal wäre eine aufklappbare Ansicht wie bei einem JTree - in der Summenzeile stehen Informationen, wie viele Pakete empfangen wurden und der zeitliche Abstand zwischen dem aktuellen und dem davor, wenn man die Ansicht aufklappt sieht man alle dazugehörigen Pakete mit der Ankunftszeit und weiteren Informationen
* Alternativ dazu sollte man umgruppieren können, also statt der Gruppierung nach der ID beispielsweise nach der Anzahl der Nutzdaten-Bytes gruppieren
* Optimal wäre auch eine Sortierung nach verschiedenen Kriterien, beispielsweise Zeit, ID, Daten, wobei in diesem Fall die Gruppierung wohl abgeschaltet werden sollte
Nun ist das erste Problem: Wie werden die empfangenen Daten am besten gespeichert? Einerseits könnte ich alle Daten in einer LinkedList speichern, wie ist das dann allerdings mit der Performance beim Auslesen und Sortieren? Und wie ließe sich eine Gruppierung bewerkstelligen?
Andererseits habe ich darangedacht, eine Datenbank im RAM zu erstellen (z.B. HSQLDB) und die die Sortierung bzw. Gruppierung machen zu lassen, aber bringt das wirklich Vorteile in der Performance? Imho arbeitet die DB ja nicht mit Zeigern, deswegen würden wohl alle Datensätze zurückgegeben werden, dürfte dann wohl egal sein ob ich die Daten aus einer Datenbank oder LinkedList bekomme oder? Dann wäre wohl die Sortiermöglichkeiten der DB der einzige Vorteil, sehe ich das richtig?
Ich würde mich freuen, wenn ich ein paar Tips bekommen könnte, da ich in Sachen Performance nicht so wirklich viel Erfahrungen habe... und genau, da die Daten fortlaufend eintreffen, sollten die natürlich optimalerweise auch immer gleich eingefügt werden... ausser das geht gar nicht, also on-the-fly einsortieren, dann muss ich mir was anderes überlegen...