lass mich raten... du hast noch keinen beweis, dass das Szenario überhaupt performance probleme bringt, vielleicht noch nicht mal dass es wirklich so "viele" sind.
Lieg ich falsch - such dir eine lösung
Lieg ich richtig - lass die finger von irgendwelchen "performanceoptimierungen"
ja und nein. Ich könnte jetzt 5 Seiten schreiben, dass zu erklären, aber mal ne Kurzfassung:
Das ganze ist ein "Hobby/Übungs Projekt" und nicht kommerziell und ich mache momentan eine Weiterbildung in Informatik (man verzeihe mir deshalb gewisse Bildungslücken) und das würde sich dann auch noch gut als Abschlussarbeit machen, wenn ich dann soweit bin. Schlussendlich ist es dem Anwender überlassen, wie gross sein Datensatz ist und wenn es zu langsam ist, wird er es einfach nicht benutzen, was schlussendlich egal ist. Als Lerneffekt von Multithreading wäre es aber eine gute Möglichkeit.
Aber du hast Recht. Obige Berechnung wird nicht dauernd gemacht, das Resultat wandert dann zurück in die Datenbank. Es ist also eher eine einmalige Aktion (Daten müssen aber gepflegt werden und ab und zu das ganze neu erstellen wird wohl auch nötig sein), deshalb kann das auch dauern und ist nicht performance kritisch (Bei 100'000 records dürfte es in den Stundenbereich kommen, aber natürlich extrem infrastruktur abhängig).
Beim weiteren überlegen gibt es einen anderen Bereich, der performance kritischer wäre und die eigentliche Hauptfunktionalität darstellt. Aber auch da wird über eine Map Iteriert, die geteilt werden müsste und am Ende sollte ich eine Liste haben. Also ja, den Hebel habe ich hier wohl falsch angesetzt.
Hm. Das sieht IMHO aber AUCH (unnötig?) kompliziert aus.
Als erstes stellt sich IMHO die Frage, ob die Moleküle wirklich als Map<Integer, Molecule> geliefert werden müssen. Eine List wäre praktischer. Oder werden die Integers wirklich irgendwo gebraucht? Sind die Integers forlaufend, oder bunt gemischt?
Integer ist der Primärschlüssel, also ja der ist nötig. Die logische Folge-Frage ist, wieso ich den nicht ins Molekül stecke. Die Antwort ist, das IMolecule ein Interface ist und zwar aus einer anderen Bibliothek, auf dem das ganze basiert:
SourceForge.net: cdk
Mein Projekt soll auch keine Applikation liefern sondern auch mehr eine Bibliothek. Somit soll jeder seine eigene Implementation von IMolecule verwenden können.
Das beantwortet auch gleich deine zweite Frage, in der Regel dürften die Integers fortlaufend sein, ist aber nicht wirklich sicher und lücken könnten auch auftreten durch löschen oder Sequence cache.
Genug geschrieben, wird jetzt schon schwer sein Leser zu finden für den Text.
