mmofacts.com

Umgang mit Dateien

gepostet vor 19 Jahre, 10 Monate von barkel
Hi ihr,
ich höre seit ich mich mit der Serverseitigen Programmierung über PHP beschäftige leider nur schlechtes über das Nutzen von normalen Dateien als Speicher, aber warum sind Dateien so schlecht (angeblich)?

Ich hatte bisher noch keine Probleme damit und kann mir vorstellen, dass bei einer ordentlichen Programmierung, keine Porbleme auch bei größeren Spielen auftreten sollten..,..was meint ihr?

EDIT: Die eigentliche Absicht dieser Frage besteht darin, in Erfahrung zu bringen ob ich mich bei der Programmierung meines Spiels auf Dateien verlassen kann oder lieber doch eine richtige Datenbank nutzen sollte?!

Ich habe zum Beispiel eine Funktion programmiert, die einzelne Werte in einer Datei mit beliebig viele Arrays ersetzt...wahrscheinlich aber zu langsam um mit der einfachen DB Methode mithalten zu können richtig?!

mfg barkel
gepostet vor 19 Jahre, 10 Monate von Mudder
Datenbanken haben unterschiedlichste Vorteile.
Zu einem sind sie schneller als das öffnen und auslesen einer Datei. Dann ist auch das Problem wenn 2 Prozesse auf die selbe Datei zugreifen kommt es zu einer Warteschlange oder auch zu einem Zugriffsfehler.

Und dann hat die Datenbank die enormen Vorteile das man sie mit Bedinugen abfragen kann. "Hole alle Planetendaten von User X" nur als Beispiel.
gepostet vor 19 Jahre, 10 Monate von barkel
Ich habe mir daher auch gedacht, das jeder User seine spezfischen Daten daher auch so in Dateien vorliegen hat, das eben nur ein Prozess auf eine Datei gleichzeitig stattfindet.

Das heisst also, dass aus einer allgemeinen Spieldatenbank die Werte ausgelesen werden, im Skript verarbeitet werden und schlussendlich die Veränderung nur in den Spielerdateien stattfindet.
gepostet vor 19 Jahre, 10 Monate von Crafty-Catcher
Ich habe mir daher auch gedacht, das jeder User seine spezfischen Daten daher auch so in Dateien vorliegen hat, das eben nur ein Prozess auf eine Datei gleichzeitig stattfindet.


Hm bedenke aber:
User A schaut sich sein Profil an und versucht seine ICQ nummer zu ändern (beliebiges Besipiel).
User B schaut sich die Userinfos von User A an, wo unter anderem auch seine ICQ nummer steht.

Dies passiert durch Zufall quasi zeitgleich.....
gepostet vor 19 Jahre, 10 Monate von Jutaro
Es ist schlichtweg wesentlich aufwendiger, komplizierter und langsamer, wenn Du alle Funktionen, die Du bei einer Datenbank hast (und auch benoetigst) mit Dateien nachstellen willst.
Aus welchem Grund willst Du ueberhaupt mit Dateien arbeiten?
gepostet vor 19 Jahre, 10 Monate von KEEN
Zu 95% wollen die Leute mit Dateien arbeiten, weil sie sich damit besser auskennen und MySQL noch nicht richtig kennen gelernt haben.

War bei mir am Anfang auch nicht anders. Wenn man sich aber in MySQL mal eingearbeitet hat, was gar nicht so schwer ist, möchte man nicht mehr darauf verzischten. Ich kenne niemanden der danach freiwillig wieder auf Dateien umgestiegen ist. Abgesehen davor kann man so Sachen wie Indizes durch Dateien praktisch nicht ersetzen, bei großen Datenbeständen führt von demher kein Weg an einer Datenbank vorbei.
gepostet vor 19 Jahre, 10 Monate von barkel
Original von KEEN
Zu 95% wollen die Leute mit Dateien arbeiten, weil sie sich damit besser auskennen und MySQL noch nicht richtig kennen gelernt haben.
...


Ja das stimmt sogar, ich habe mich bisher noch nciht eingehend mit MySQL auseinandergesetzt. Allerdings..könnte man das Problem der beiden User nicht auch dadurch umgehen, als dass der eine User B, der die Infos von A auslesen will, diese als include("datei"); präsentiert bekommt? (Oder gibt es Probleme, wenn die Datei includet wird, während die Datei per fopen geöffnet ist?) Somit würde ich die Speicherdatei nicht über fopen öffnen und User A könnte seine ICQ Nummer immer noch ohne Probleme ändern.

???

mfg

:lol:
gepostet vor 19 Jahre, 10 Monate von Crafty-Catcher
Ja stimmt ok - dann gleiches Beispiel andere Daten
sagen wir eine Weltraum BG
Schiffe die gebaut werden in der Schleife gespeichert.

User A der die Schiffe baut loggt sich ein - Überprüfung ob die Schiffe fertig sind. Sagen wir Schiffe sind fertig (nicht alle 5 von 10 oder so) und die Datei muss geändert werden.

User B greift aber zu quasi gleichen Zeit wo sich User A einloggt an. Da muss auch geprüft werden welche Schiffe von User A fertig sind und welche nicht.

--------
Weiteres Problem
Das Handling wird dann schwer man muss den Dateien ja IDs geben.
Also muss man erst Position von User A auslesen um den Planet zu finden dann muss man die Datei mit dme Nick von User A öffnen und die Datei mit der Punktzahl nur um sowas wie ne Art Galaxieansicht anzuzeigen.
Beispiel
User A,B,C,D greifen alle auf das System 12:13:7 zu.
Alle brauchen die gleichen Dateien....
gepostet vor 19 Jahre, 10 Monate von Qmaster
Benutze eine richtige Datenbank !

Wofür etwas selbst auspogrammieren, was andere für dich schon gemacht haben und seit Jahren optiemieren und verbessern.

Denn eine MySQL-Datenbank z.B. ist nichts anderes, als das was du vorhast selbst zu machen. Das Datenbank-System managed das ganze für dich und sorgt dafür dass keine Konflikte bei Anfragen entstehen.

Die SQL-Syntax ist sehr leicht zu erlernen und ist nicht besonders umfangreich. Für einfache Sachen hast du dir das nötige in wenigen Stunden angeeignet.
gepostet vor 19 Jahre, 10 Monate von barkel
Das hört sich für mich jetzt eher so an als sei das ein rein rechnerisches (zeitliches) Problem. Daher wäre es doch durchaus möglich die Kampfstärke des gegner erst dann zu berechnen wenn die Flotte von B bei A eintrifft....? B kann so mit vorher nur per Spionagesonden o.ä. herrausfinden wie weit entwickelt A ist.

Wenn nun die Flotte von B bei A eintrifft, wird durch die selbe Schleife wie bei A, wenn er sich einloggen würde überprüft, ob und wieviele Schiffe fertig sind. Diese Schiffe werden dann zunächst als Flotte bei A eingetragen und dann ganz normal im Kampf mitberechnet.

Und ich will mal behaupten das es beinahe unmöglich ist, das zwei User auf eine Milisekunde genau gleichzeitig eine Aktion ausführen.

Oder ist das so nicht möglich?
gepostet vor 19 Jahre, 10 Monate von Crafty-Catcher
Doch aber das löst das Problem nicht.

Es ist sicher einfacher mysql zu lernen als das mit Dateien zu machen. Schonw eil man sich alle Administrationstools selber bauen muss etwa wie phpmyadmin.

Mal abgesehen davon das es langsamer ist.
gepostet vor 19 Jahre, 10 Monate von barkel
hmmm das ist wahrscheinlich ein argument. naja ok, mal schauen ob ich mysql lernen kann

mfg barkel
gepostet vor 19 Jahre, 10 Monate von der-Adler
Hör auf Crafty-Catcher, der hat wirklich Ahnung davon. Das hat er mir auch schon ein paar Mal bewiesen. :roll:

Ich als eher unerfahrener Progger (habe erst vor ein paar Monaten angefagen), würde ich dir raten dich nicht weiter mit Dateien zu beschäftigen.
So hab ich am Anfang begonnen und es ist nach ein paar Tagen im Sand verlaufen. MySQL ist wirklich einfach. Grundaufbau und Grundfunktionen sind schnell begriffen.

Dank Tools wie php myadmin, ist das ganze im nachhinein auch noch sehr flexibel und einfach abzuändern. Daher ist es nicht schlimm wenn deine Datenbank anfangs etwas Chaotisch ist. Mit der Zeit kommen die Erfahrungen dazu und deine Datenbank lässt sich dann jederzeit deinem Wissenstand angleichen.
So war es zumindest bei mir.
gepostet vor 19 Jahre, 10 Monate von barkel
Wie gesagt, vermutlich habt ihr beide Recht!

@ Adler: schönes Spiel! Habs mir gerade mal angeschaut ! ^^ Allerdings finde ich sind die Grafikpacks noch teilweise etwas unausgereift (von der Auflösung her)

Aber...gut das gehört ja jetzt nicht hierher Auf jedemfall finde ich dien Spiel echt töööfte

mfg

Auf diese Diskussion antworten