Ankündigung

Einklappen
Keine Ankündigung bisher.

Zweidimensionale Karte

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • nikosch
    antwortet
    Doch bringt was.
    Wenn Du bspw. einen Zugriff auf Feld 400/800 hast (was auch immer Deine Anwendung genau macht) dann kannst Du vorher berechnen, in welchem Quadranten das Feld liegt und nur die Koordinaten dieses Quadranten einlesen. (Auch wenn der Vergleich mächtig hinkt: so ähnlich, wie das Google Maps veranstaltet...) Natürlich vorausgesetzt, Du speicherst die Quadranten in verschiedenen Dateien ab.
    Bei einer Datenbank ist das wohl eher unerheblich.

    Aber bitte: Ich habe so etwas noch nie versucht. Meine Antworten sind im Endeffekt Spekulation.

    Einen Kommentar schreiben:


  • Griffith
    antwortet
    Naja, wenn ichs als Datei mache, dann bringen mich Quadranten auch nicht weiter.

    Immerhin reicht bei der Datei ein einziges fseek() und fread() um das gewünschte Feld einzulesen. Bzw. beim Einlesen eines Rechtecks auf der Karte ein fseek() und ein fread(Breite) pro Zeile.

    Mit Quadranten würde es da nur unnötig komplizierter.

    Aber was bringt es mir im Bezug auf die Datenbank?
    Ich verstehe noch nicht ganz, wie du das mit den Quadranten meinst :\

    Edit:
    Ich sollte evtl noch anmerken, dass auf meinem Webserver sehr sehr oft auf diese Karte zugegriffen wird.
    Fast bei jedem 4. Auruf schätze ich, wird auf die Karte zugeriffen. Von einem Feld bis hin zu einem Quadrat von 10 Feldern pro Aufruf.

    Auch sind die Zugriffe sehr zufällig. Mal ist es ein Feld oben links auf der Karte, mal ein Feld völlig woanders. (Von Aufruf zu Aufruf)

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Wie gesagt: resultierend 1MB. Als Datei ist's das eine, aber als Array im Speicher? Ich spekuliere mal: Das geht nicht gut. Unterteile die Karte in kleinere Quadranten und lade immer nur die in PHP nach. Vielleicht brauchst Du gar nicht so oft unterteilen, weil die Speicherauslastung ja quadratisch abhängig von der Kantenlänge ist.

    Einen Kommentar schreiben:


  • Griffith
    antwortet
    Ein Byte pro Feld trifft es eigentlich sehr gut. Ein Nibble mit 16 Möglichkeiten wäre bereits zu wenig.

    Am schönsten wäre es glaube ich, wenn die Karte ununterbrochen im Arbeitsspeicher liegt.

    Angenommen ich würde den HTTP-Server per Hand in C schreiben, so wäre die ideale Lösung ein ByteArray im Arbeitsspeicher, dass vom Start des Servers bis zum Herunterfahren des Servers im Arbeitsspeicher bleibt.

    Nur würde ich gerne wissen, ob es auch eine Lösung für PHP gibt :\

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Bei 1000x1000 und einem Flag pro Koordinate kommst Du bereits auf 1MB bzw. 1 Million Tableeinträge. Vielleicht solltest Du Dir eine Strategie überlegen, die Gesamt-Karte weiter zu unterteilen.

    Vielleicht reicht Dir auch ein BIT, dann sparst Du etwas.

    Einen Kommentar schreiben:

Lädt...
X