php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.11.2008, 22:55  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Ähm ich glaube du hast da dein Datenbankdesign sowieso etwas falsch.
Du musst bei dem Kartenteil eine Spalte machen indem du die ID der Karte speicherst. Also:
Code:
karten
id | name

kartenteile
id | karten_id | name

quadrate
id | kartenteil_id | name | eigenschaften ...
Also nicht in der Karte alle Kartenteile speichern sondern andersrum PRO Kartenteil einfach die ID der Karte zu der es gehört. Dann brauchst du auch nich so ne Liste mit IDs ... außerdem kannst du dann viel viel einfacher die Elemente aus der Tabelle raus lesen die zu einer Karte gehören ... andersrum wäre das nur sehr umständlich möglich ....
hm ok das stimmt, da hab ich nicht genug nachgedacht wär mir ... hoffentlich ... früh genug aufgefallen Allerdings in quadrate ein feld kartenteil_id funktioniert nicht, weil ich dann ja eben 16 millionen einträge machen müsste. ich will ja eben jedes quadrat nur einmal ablegen (also z.b. ein quadrat "gras", nicht 10.000 quadrate "gras") und dann von kartenteile in der liste von quadraten nur auf die ID des eintrags in quadrate verlinken. also wenn ich in kartenteil 1 gras brauche linke ich dann eben auf "gras" in quadrate und in jedem anderen kartenteil kann ich das auch machen.

die alternative wäre dann eben für jedes kartenteil eine tabelle und in der tabelle alle quadrate. allerdings würde das SEHR viele tabellen und eben insgesamt 16 millionen einträge ergeben. von daher ist das vermutlich nicht besonders vorteilhaft.
BlackWolf ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.11.2008, 17:58  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Dann musst du eine Ralationentabelle erstellen. In der die ID des Kartenteils und die ID des Quadrats gespeichert wird. Dann hast du jeden Quadrattyp nur einmal abgespeichert, allerdings hat deine Relationentabelle trotzdem 16 Mio Einträge.

Die Frage ist halt überhaupt ob du alles so genau abspeichern möchtest. Wieso kann du die Kartenteile nicht einfach als eine vorgefertige Grafik speichern z.b. Also einmal generieren lassen und dann abspeichern. Und jedes mal wenn dann die Gebäude darauf kommen dann liest du eben aus der Datenbank nur die Gebäude aus ... das sind dann wohl nur noch ein Bruchteil von 16 Mio.

Weil 16 Mio Einträge so zu speichern dass du dann ohne Probleme immer 50x50 auslesen kannst wird schwierig.

Falls du dann wirklich die Lösung nutzen solltest dass du bei einem Kartenteil einen String speicherst der alle IDs der Typen speichert dann würde ich aber trotzdem darauf verzichten die als ASCII Zeichen zu speichern. Wie viele Typen von Quadraten hast du denn? Bestimmt nicht 255 oder? Wenn du maximal 10 Typen hast dann haste ja auch immer pro Typ 2 Byte (eine Zahl + Trennzeichen).
Flor1an ist offline  
Alt 24.11.2008, 20:40  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Dann musst du eine Ralationentabelle erstellen. In der die ID des Kartenteils und die ID des Quadrats gespeichert wird. Dann hast du jeden Quadrattyp nur einmal abgespeichert, allerdings hat deine Relationentabelle trotzdem 16 Mio Einträge.

Die Frage ist halt überhaupt ob du alles so genau abspeichern möchtest. Wieso kann du die Kartenteile nicht einfach als eine vorgefertige Grafik speichern z.b. Also einmal generieren lassen und dann abspeichern. Und jedes mal wenn dann die Gebäude darauf kommen dann liest du eben aus der Datenbank nur die Gebäude aus ... das sind dann wohl nur noch ein Bruchteil von 16 Mio.

Weil 16 Mio Einträge so zu speichern dass du dann ohne Probleme immer 50x50 auslesen kannst wird schwierig.

Falls du dann wirklich die Lösung nutzen solltest dass du bei einem Kartenteil einen String speicherst der alle IDs der Typen speichert dann würde ich aber trotzdem darauf verzichten die als ASCII Zeichen zu speichern. Wie viele Typen von Quadraten hast du denn? Bestimmt nicht 255 oder? Wenn du maximal 10 Typen hast dann haste ja auch immer pro Typ 2 Byte (eine Zahl + Trennzeichen).
Aaaalso, ich komme mit neuen Erkentnissen wieder
Zum einen ist das Problem ganz einfach, das es kein "Standardfeld" in diesem Sinne gibt. Also es gibt keinen Standardfeld bei dem ich sagen kann "eine karte besteht aus diesem feld und obendrauf setze ich einfach häuser".

Allerdings habe ich nach einigen Tests mit 15 Millionen Feldern folgende Erkentniss gewonnen:
Es kommt nur auf die größe der Tabelle an, nicht auf die größe der Datenbank. Sprich was ich machen werde, ist meine Karte in 316*316 Quadranten einzuteilen. Und jeder Quadrant wird eine eigene Tabelle. So bekomme ich Tabellen mit maximal 100.000 Zeilen und diese arbeiten ziemlich schnell soweit ich das testen konnte (SELECT-Anfrage ohne Ergebnisse, sprich er muss die gesamte Datenbank durchsuchen, dauert 0.06s was eigentlich ein ziemlich normaler Wert ist). Die einzelnen Zeilen versuche ich natürlich vom Platzverbrauch her zu optimieren, das wird man sehen. Aber generell sollte ich so hinkommen.
Dann komme ich zwar im Endeffekt auf 16 Millionen Zeilen, allerdings wird die Datenbank nicht langsam (zumindest konnte ich das nicht feststellen, hatte eine Datenbank mit 160 Tabellen á 100.000 Zeilen, also auch 16 Millionen Einträge und es lief schnell).
So sollte ich die Performance möglichst hoch halten können und trotzdem alles speichern.

Oder hat jemand noch Ergänzungen dazu?

mfg

PS: So wie ich das angedacht hatte hätte es durchaus sein können das ich mehr als 255 Typen habe. Wenn ich jetzt aber jedes Feld als einzelne Zeile speichere erübrigt sich das ja sowieso.
BlackWolf ist offline  
Alt 25.11.2008, 18:00  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ja jedes Element seperat zu speichern finde ich auf jeden Fall besser. Das mit mehreren Tabellen hatte ich ja schon angesprochen. Es geht wirklich nur darum was eben an Daten durchsucht werden muss bei einer Abfrage, wenn eine Tabelle kleiner ist geht dass natürlich schneller. Nur die Flexibilität leidet halt darunter dass du Daten gleichen Types in verschiedenen Tabellen speicherst.
Flor1an ist offline  
Alt 25.11.2008, 18:05  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Flor1an Beitrag anzeigen
Ja jedes Element seperat zu speichern finde ich auf jeden Fall besser. Das mit mehreren Tabellen hatte ich ja schon angesprochen. Es geht wirklich nur darum was eben an Daten durchsucht werden muss bei einer Abfrage, wenn eine Tabelle kleiner ist geht dass natürlich schneller. Nur die Flexibilität leidet halt darunter dass du Daten gleichen Types in verschiedenen Tabellen speicherst.
ja. so umfangreich wie das ganze ist müsste ich änderungen in der struktur der DB allerdings onehin per skript durchführen, von daher ist das nicht so tragisch. mal schaun ob was draus wird ...
BlackWolf ist offline  
Alt 26.11.2008, 18:22  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Kannst dich ja mal bei mir melden wenn du mit dienem Projekt weiter bist und es vlt. im Livebetrieb läuft.
Flor1an ist offline  
Alt 28.11.2008, 07:25  
Erfahrener Benutzer
 
Registriert seit: 19.03.2007
Beiträge: 176
BlackWolf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das könnte noch ne ganze Weile dauern, aber ich werd dran denken

mfg
BlackWolf ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Benutze Zeichen anzeigen! cokotech Datenbanken 3 06.06.2008 18:24
erste 7 zeichen überprüfen aircrash PHP Tipps 2008 1 28.09.2007 09:11
Regex Problem in Verbindung mit ASCII Zeichen R4v3r PHP Tipps 2007 4 15.02.2007 17:41
Wieviel Pixel hat ein Zeichen? Ausmessen eines DIV-Container webazubi PHP-Fortgeschrittene 4 06.07.2006 14:52
ascii zeichen umwandeln rooomka HTML, Usability und Barrierefreiheit 1 28.04.2006 19:45
Unsichtbares Zeichen - IE vs. Firefox Cyberbob_at_tot PHP Tipps 2006 13 13.02.2006 17:23
JAvaScript:Interger zu ASCII Zeichen Xalon HTML, Usability und Barrierefreiheit 7 30.12.2005 19:33
ASCII - Zeichen im Forum (Dos statt Windows)?! Brease Off-Topic Diskussionen 13 26.11.2005 13:46
[Erledigt] Zeichen ersetzen in einem Dokument PHP Tipps 2007 16 25.11.2005 14:16
[Erledigt] Konvertierung OEM ASCII zu Windows ANSI Zeichen PHP-Fortgeschrittene 5 12.08.2005 12:42
ASCII - Zeichen in String einbinden faux PHP Tipps 2005 10 28.05.2005 18:29
Datei auslesen bis zu einem bestimmten zeichen. (Shoutbox) PHP Tipps 2005 7 01.01.2005 20:41
[Erledigt] nur x zeichen zeigen PHP Tipps 2004-2 2 17.12.2004 15:10
Die 1. 15 Zeichen anzeigen imported_Lumio PHP Tipps 2004 2 23.08.2004 16:16

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
binärcode tabelle, binärcode liebe, ascii tabelle quadrat, ich liebe dich binärcode, binärcode ich liebe dich, liebe binärcode, binärcode erstellen, ich liebe dich in binärcode, ascii tabelle binärcode, binärcode tabelle buchstaben, binärcode ascii, binärcode quadrat, binärcode für ich liebe dich, ich liebe dich ascii, ascii viereck, liebe in binärcode, ascii tabelle viereck, ascii quadrat, liebe in binärcodes, php binärcode erstellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum