Datentypen Referenzen oder seperate IDs vergleichen?

Mark.W

Mitglied
Hallo,
ich hoffe dass sich einige etwas unter dem Threadtitel vorstellen können, wenn nicht tu mir Leid :(

Zunächst einmal beschreibe ich mein Vorhaben:
Ich habe Chaträume und Spieler, wobei ein Spieler in beliebig vielen Chaträumen aktiv sein kann (lesen) und ein Chatraum entsprechend von beliebig vielen Spielern benutzt werden kann. Die Spieler können in mehreren Chaträumen gleichzeitig aktiv sein! Weil ich lieber den Arbeitsspeicher als Rechenleistung beanspruchen möchte, habe ich mir gedacht, dass Chaträume die aktiven Spieler verwalten. Das hätte natürlich zur Folge, dass Datensätze doppelt vorhanden wären, da zum Beispiel die Standardchannel von 90% der ~150 User genutzt werden würden. Im Zweifesfall könnte man die Standardchannel umkehren, aber mir geht es nun um Folgendes:

Es handelt sich um ein Minecraft Plugin und dort erhalte ich, sobald ein Spieler in den Chat postet, lediglich ein Spieler-Objekt, aus welchem ich keine Informationen bezüglich des Chatraums herauslesen kann. Ich dachte also zunächst ein eine HashMap, die für jeden aktiven Spieler eine entsprechende ChatSpieler Referenz enthält. Anschließend würde ich aus dem Spieler den aktiven Chatraum auslesen und anhand dessen Liste die Nachricht an die jeweiligen Spieler weiterleiten.

Mich verunsichert nun die Dopplung der Datensätze, da man datenbanktechnisch eine zusätzliche Spielertabelle einrichten würde, die über Indizes angesprochen wird. So hätte ich in der HashMap statt den ChatPlayern dann nur noch einen Integer, über welchen ich aus einem entsprechenden Array dann den ChatPlayer erhalte. So gäbe es nur eine Liste, in welcher die einzelnen ChatPlayer referenziert sind, aber lohnt sich dieser Aufwand?

Ich habe zusätzlich einen Überblick über mein Gesamtvorhaben gegeben, da es möglicherweise bessere Lösungen gibt :)
Bin um jeden Rat dankbar, da mir sehr viel an der Optimierung meiner Programme liegt.
 
S

SlaterB

Gast
geht es um einen Java-basierten Server? für flüchtige Chat-Eintritte sehe ich nicht unbedingt die Notwendigkeit einer neuen DB-Tabelle,
überhaupt brauchst du die doch nur, wenn du neue Daten ablegst, nach 'Dopplung der Datensätze' klingt das für mich nicht,
allein doppelte Ids, damit alle Tabellen einander zugeordnet werden können, sind eher unkritisch

-----

auf Java Ebene paar hundert Objekte untereinander verknüpfen ist performancemäßig unkritisch,
jedes wichtige Objekte sollte nur genau einmal vorhanden sein, da ist ein Link in einer Liste nicht größer als eine einzelne Id als Objekt, jedes vorhandene Objekt ist als Referenz nur 4 Bytes groß
 

Mark.W

Mitglied
Zunächst einmal danke für die Antwort.
Es geht mir um das Speichern der Daten im Arbeitsspeicher und zwar so, dass der Server möglichst wenig tun muss.

Die Dopplung besteht in dem Moment, in welchem ein Spieler in mehr als einem Channel eingetragen ist, denn dann taucht er in jedem einzelnen Channel in der entsprechenden Liste auf. Den Vergleich zu den Datenbanken habe ich nur gemacht, weil ich es von dort gewohnt bin :p
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
gottgegeben ist es nicht, dass Daten doppelt sind,
'irgendwo auftauchen' ist ziemlich ungenau, hast du etwas konkrete Informationen?

wenn man ganz allgemein ein Objekt x in 5 Liste einfügt, hat man nicht 4-5 Doppelte von x,
sondern einen ziemlich normalen Zustand

für eine verteilte Anwendung mit Server und vielen Clients sind freilich Daten in jedem PC kopiert,
aber auch der Server selber kann natürlich so kompliziert sein, dass Daten doppelt vorliegen,
etwa pro dort eingeloggten User mit eigener Session, wie es in J2EE heißen würde

gewiss kann man da überlegen zu sparen,
so allgemein kann glaube ich aber schwer jemand viel ergänzen, mein Redefluss endet gerade ;)
 

Mark.W

Mitglied
Also jeder Channel hat eine Liste mit Spielern, die ihm "angehören", die also Nachrichten empfangen, die an diesen Channel gehen. Im Moment habe ich zwei Channel, zu welchen jeder neue Benutzer automatisch gehören soll. Das würde schon mal bedeuten, dass es zwei Listen mit demselben Inhalt gibt, wenn kein User den Channel wechselt. Aber selbst wenn gewechselt wird, so werden die Listen größtenteils übereinstimmen.. die Alternative, bei welcher keine Daten doppelt vorhanden sind, wäre wenn jeder Spieler seine eigenen Channel verwaltet, aber dann muss das Programm ja mehr rechnen, als würde es lediglich aus einer Liste auswählen.

Verstehst du ungefähr was ich meine?

Vielleicht siehst du das Problem nicht, weil du es aufgrund deiner Erfahrung nicht als Problem bewertest.
 

freez

Top Contributor
Also grundsätzlich solltest du es so machen, wie es programmtechnisch am sinnvollsten ist. Außerdem reden wir hier doch von Java Objekten. Wenn ein Objekt (ein Spieler in deinem Fall) in 100 Channel vertreten ist, so wäre er trotzdem nur ein mal vorhanden (vorausgesetzt du clonst nicht das Objekt). Und in Objektorientierten Sprachen (wie Java sie ist) werden Objekte nun mal an vielen verschiedenen Stellen verwendet um mit ihnen zu arbeiten. Deswegen sind sie nicht doppelt!

Versuche deine Welt (also deine Chaträume, User, evtl. auch Nachrichten) in Java Objekte umzusetzen. Und dann gibst du jedem Objekt die Objekte die er zum arbeiten benötigt.

Grundsätzlich würde ich dir Lektüre zu Objektorientierter Programmierung empfehlen.
 
S

SlaterB

Gast
> Vielleicht siehst du das Problem nicht, weil du es aufgrund deiner Erfahrung nicht als Problem bewertest.

so kann man es schmeichelnd ausdrücken,

Hinweis: 'wenn jeder Spieler seine eigenen Channel verwaltet'
-> dann wären ja die Channel 'doppelt' bzw. gar 100fach vorhanden, von jedem Spieler aus,

aber das ist einfach kein Problem sondern Normalzustand
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
K Referenzen finden Allgemeine Java-Themen 6
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
E EMF Ecore Modell. Referenzen nach außen. Allgemeine Java-Themen 2
F Referenzen auf Objekte Allgemeine Java-Themen 5
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
S Serialisierung und Referenzen Allgemeine Java-Themen 6
D Referenzen; == Allgemeine Java-Themen 2
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
G Pointer und Referenzen Allgemeine Java-Themen 3
I Referenzen in Datei speichern Allgemeine Java-Themen 2
G (De)serialisierung und Referenzen Allgemeine Java-Themen 5
J Bibliothek gesucht Ana_lysieren von wss. Referenzen Allgemeine Java-Themen 2
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
M Übergabe von Referenzen Allgemeine Java-Themen 3
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
P Das leidige Thema: Referenzen Allgemeine Java-Themen 2
N int[] referenzen in ein Array packen, brauche Hilfe. Allgemeine Java-Themen 7
A Referenzen / HashCodes nicht konstant? Allgemeine Java-Themen 2
K Probleme mit Referenzen Allgemeine Java-Themen 2
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
Ü Arrays vergleichen Allgemeine Java-Themen 59
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
D Zwei Listen vergleichen Allgemeine Java-Themen 7
F 2 JsonArray vergleichen, geht es auch einfacher ? Allgemeine Java-Themen 3
N String vergleichen. Allgemeine Java-Themen 27
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
D Erste Schritte Arrays vergleichen und die zahlen die nur einmal vorkommen ausgeben Allgemeine Java-Themen 5
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
CptK Input/Output Buttonwerte vergleichen Allgemeine Java-Themen 5
J Mockito - Objekte miteinander vergleichen (equals) Allgemeine Java-Themen 6
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
C Input/Output Textdateien vergleichen Allgemeine Java-Themen 3
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
KeVoZ_ JSoup - Website Inhalt/Element mit String vergleichen Allgemeine Java-Themen 2
K Eingabe mit Char vergleichen klappt nicht! Allgemeine Java-Themen 2
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
AssELAss Zwei Arrays / ArrayLists inhaltlich vergleichen Allgemeine Java-Themen 2
W Variablen Dates vergleichen Allgemeine Java-Themen 7
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
J Farben mit comparing vergleichen Allgemeine Java-Themen 3
Dechasa Java 8 - Datum vergleichen Allgemeine Java-Themen 5
S Zwei String vergleichen, Fehler markieren Allgemeine Java-Themen 3
Dechasa Vergleichen von zwei Arrays Allgemeine Java-Themen 4
H Strings vergleichen Allgemeine Java-Themen 9
Y inhalte aus 2 unterschiedlichen Arrays miteinander vergleichen Allgemeine Java-Themen 12
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
2 Joda Time - Localtime mit anderer Zeit vergleichen? Allgemeine Java-Themen 1
A Kann String nicht vergleichen (Android) Allgemeine Java-Themen 4
F Zwei LinkedHashMaps iterieren und vergleichen Allgemeine Java-Themen 2
D Variablen java.io.File zum vergleichen abspeichern Allgemeine Java-Themen 1
7 6 int variablen vergleichen Allgemeine Java-Themen 34
E Lesen von mehrere Csv-Datei und ihre Inhalte vergleichen Allgemeine Java-Themen 3
R Int werte vergleichen und Anzahl Paare ausgeben Allgemeine Java-Themen 4
OnDemand Spalten vergleichen Java Allgemeine Java-Themen 25
C Rechenzeit verschiedener Algorithmen vergleichen Allgemeine Java-Themen 4
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
L Zwei Files miteinander vergleichen und Grafisch darstellen Allgemeine Java-Themen 1
S String vergleichen Allgemeine Java-Themen 1
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
N Variablen Positionen vergleichen ??? Allgemeine Java-Themen 2
A Bilder vergleichen auf gleichheit oder ähnlichkeit Allgemeine Java-Themen 8
J XML Dateien vergleichen Allgemeine Java-Themen 9
X Collections Hashmaps vergleichen Allgemeine Java-Themen 23
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
S Zwei Comparable (compareTo) vergleichen Allgemeine Java-Themen 6
A PDF Content vergleichen Allgemeine Java-Themen 3
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
J String nur erste Zeichen vergleichen Allgemeine Java-Themen 6
S Reports vergleichen Allgemeine Java-Themen 8
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
T Wörter Vergleichen Allgemeine Java-Themen 3
T Uhrzeiten vergleichen Allgemeine Java-Themen 4
P JAVA Bilder/Videos in Form von Files vergleichen Allgemeine Java-Themen 7
S Strings vergleichen Allgemeine Java-Themen 11
9 Dateinamen erfassen und vergleichen Allgemeine Java-Themen 6
S String Zeichen für Zeichen vergleichen Allgemeine Java-Themen 4
D String mit Wörterbuch vergleichen Allgemeine Java-Themen 12
I Input/Output Zeichenkette eingeben und vergleichen Allgemeine Java-Themen 2
Landei Hilfsklasse zum Vergleichen Allgemeine Java-Themen 5
S Datum vergleichen - ohne Hilfsmittel Allgemeine Java-Themen 8
1 zwei Strings vergleichen Allgemeine Java-Themen 16
F Vergleichen von Datumswerten Allgemeine Java-Themen 3
S Ergebnis von Cursor c1 mit Cursor c2 vergleichen Allgemeine Java-Themen 3
G Zwei bytes vergleichen Allgemeine Java-Themen 2
S Fixe Zahlen vergleichen Allgemeine Java-Themen 4
M Zeitangaben vergleichen Allgemeine Java-Themen 2
MonsterBit 2 Werte aus 2 Array vergleichen Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben