Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

11

28.05.2014, 10:00

Dennoch ist XML alles andere als eine effiziente Art und Weise, um große Datenmengen zu speichern. Meiner Erfahrung nach kann selbst bei simplen .obj Dateien von weniger als 1GB Größe das Parsen bereits zum Bottleneck werden. Ich würde mir unbedingt auch erst mal überlegen, ob es wirklich XML sein muss...

12

28.05.2014, 12:17

Also die Anwendung im Detail:

Es geht um eine Art Bergbau-Simulation im Rahmen eines Projektes (4XGame). Für eine nutzerfreundliche Editierbarkeit bei Daten wie Technologien oder Einheiten habe ich mich für XML entschieden. Das bedeutet nicht zwangsläufig, dass alles über XML eingelesen werden muss, zumal nicht alle Daten veränderbar sein sollen.

Zu Programmstart wird nun eine Karte mit Sektoren erzeugt, die jeweils eine Definition von Materialkonzentrationen haben. Es gibt rund 100 Materialien pro Materialkonzentrationen. Die Materialkonzentrationen werden anhand eines Algorithmus erstellt, der je nach Sektorposition Basiswerte ausgibt und mit Zufallswerten abmischt.

Bei einer Kartengröße von 2000 x 2000 Sektoren ergeben sich 4*10^8 floats. Dazu kommen noch einmal 10^7 bis 10^8 floats an weiteren Variablen, die in anderen Zusammenhängen verwendet werden sollen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

28.05.2014, 12:20

Warum speicherst Du die Daten dann nicht gleich in einem Algorithmus, wenn er die Daten doch eh erstellt. Du musst dann lediglich die bereits abgebauten Sektoren separat persistieren und die Generierungsparameter. Zumal nicht gleichzeitig *alle* Daten relevant sind, sondern nur die, die überhaupt von außen erreichbar sind. Damit reduziert sich die Datenmenge auf alle Oberflächen und Stollen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

14

28.05.2014, 12:57

@BlueCobold
100% agreed! So werde ich es machen. Es werden eh nur ein Bruchteil der Sektoren faktisch genutzt werden, da macht es natürlich sinn, diese auch erst bei Bedarf zu erzeugen.

Schreibe ich dann am besten alle neuen Daten-Sets in einen Vektor (.pushback) oder gibt es dafür einfachere bzw. bessere Methoden?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

28.05.2014, 13:15

Wenn Deine Daten räumlich sind, würde sich da auch eine räumliche Struktur anbieten.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

16

28.05.2014, 13:51

Ja, die Daten sind räumlich, wenn auch in unterschiedlichen Koordinatensystemen.
Was meinst Du mit einer räumlichen Struktur?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

28.05.2014, 13:59

Binary Space Partitioning Trees zum Beispiel.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

28.05.2014, 14:42

Eine räumliche Datenstruktur ist nur dann sinnvoll, wenn man "komplizierte" Abfragen vornimmt, die mit einer einfachen linearen Speicherung (Array/Vektor) langsam wären.
Ansonsten profitiert man davon nicht, der Speicherverbrauch ist sogar höher und der Aufwand des Erzeugens ebenfalls.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

19

28.05.2014, 15:34

Ich hätte auch gesagt: ein banales 3D-Array pro Zone/Segment/wie auch immer die Klötze bei Dir heißen. Jeweils wie von BlueCobold benannt bei der ersten Änderung generiert und dann binär als Speicherblob auf Platte geschrieben.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

28.05.2014, 18:51

Eine räumliche Datenstruktur ist nur dann sinnvoll, wenn man "komplizierte" Abfragen vornimmt, die mit einer einfachen linearen Speicherung (Array/Vektor) langsam wären.
Ansonsten profitiert man davon nicht, der Speicherverbrauch ist sogar höher und der Aufwand des Erzeugens ebenfalls.
Da er aber nicht linear speichern kann, weil gewisse Areale völlig irrelevant und andere mit Daten stark bevölkert sind, ist es aus meiner Sicht der sinnvollste Weg. Ansonsten Vorschlag wie sich lineare Speicherung machen lässt ohne alle Daten vor zu halten.
Segmentierung wie von Schrompf vorgeschlagen würde aber damit auch prima funktionieren. Ist dann nur eine Frage der Sektor-Größe.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (28.05.2014, 18:57)


Werbeanzeige