[PHP] Tabelle mit SQL Daten füllen

04/23/2014 09:49 €clips3#1
Hallo,
ich hab folgendes Problem.

Ich habe eine SQL Tabelle die ich mithilfe von PHP ausgeben lasse.
Allerdings ist die Datenmenge so hoch, dass ich nicht mehr als 5k Reihen anzeigen lassen kann ohne das sich mein Browser aufhängt bzw. der Bildschirm weiß bleibt. Insgesamt sind 80k+ Datenreihen vorhanden.
Ebenso ist ein Filtersystem mittels Javascript eingebaut.

Von den Server Ressourcen sollte dies kein Problem sein, die vollen 80k+ Reihen anzuzeigen(32gb ram, 128gb ssd cache uvm.), deshalb frage ich mich weshalb er hier streikt?

Gibt es hier möglichkeiten die Datenmenge asynchron oder so zu laden, sodass 1. die Perfomance gut bleibt und 2. ich nicht alle 80k+ Datenreihen jedesmal laden muss?

Insgesamt läd der Browser cs. 250mb jedesmal herunter, wenn alle Datensätze angezeigt werden sollen und das ist für unterwegs... nja unpraktisch ^^

Falls mir jemand was empfehlen kann oder eine Idee hat die zur Lösung beiträgt wäre ich euch sehr dankbar :)


Mfg
04/23/2014 10:02 VisionEP1#2
Dein Browser wird streiken weil der Cache überlagerd wird.
Wieso willst du 80k gleichzeitig anzeigen?

Eines der Hauptvorteile eienr Datenbank ist das ich durch eine Abfrage schnell ein Ergebnis bekomme.
Ich würde mir eine Art MYSQl Monitor basteln.
Links:
Allgemeine Infos:
Anzahl der Einträge etc
Hauptspalte nen sql such query generator. o.ä.

Du wirst ja selber am besten wissen was du von den 80k Zeilen brauchst bzw welche du gerade sehen willst
04/23/2014 10:11 €clips3#3
Quote:
Originally Posted by VisionEP1 View Post
Dein Browser wird streiken weil der Cache überlagerd wird.
Wieso willst du 80k gleichzeitig anzeigen?

Eines der Hauptvorteile eienr Datenbank ist das ich durch eine Abfrage schnell ein Ergebnis bekomme.
Ich würde mir eine Art MYSQl Monitor basteln.
Links:
Allgemeine Infos:
Anzahl der Einträge etc
Hauptspalte nen sql such query generator. o.ä.

Du wirst ja selber am besten wissen was du von den 80k Zeilen brauchst bzw welche du gerade sehen willst
Wenn ich dich richtig verstehe, würdest du es so umschreiben, dass die SQL Abfragen aus den Filtern Generiert werden?

Code:
SELECT * FROM X.Tabelle Where X._STATUS = 'meinFilterWert';
Allerdings werden trotzdem dann mehrere zehntausend Datensätze geladen.

Und die Tabelle soll möglich Userfreundlich sein, damit auch personen mit arbeiten können dich überhaupt keine Ahnung haben von Datenbanken.

Evtl. könnte man Datensätze erst laden wenn die Tabelle diese anfordert? Geht sowas?


[Only registered and activated users can see links. Click Here To Register...]
04/23/2014 10:28 Sebbix#4
PHP hat einen Timeout , sollte dieser erreicht sein bricht das Script ab und es wird nicht zurück gegeben. Sollte PHP nicht abbrechen wird dein Browser, wie oben bereits gesagt, wegen eines Cache Problems streiken.


PHP Code:
$start 0;
$einträge_pro_seite 10;
$query "SELECT * FROM Tabelle LIMIT $start,$einträge_pro_seite"
Nun könntest du mittels JS bzw AJAX bei einem bestimmten Event (Bsp Scrollen an das Ende der Seite) deine Query erneut senden mit neuen werten ($start nach oben setzen) und diese dann anzeigen.

Weitere Verbesserung wäre statt "*" , lediglich die Spalten auswählen die du auch brauchst.

Edit: [Only registered and activated users can see links. Click Here To Register...]
Wäre das passende MySql-Manual
04/23/2014 10:29 €clips3#5
Quote:
Originally Posted by Sebbix View Post
PHP hat einen Timeout , sollte dieser erreicht sein bricht das Script ab und es wird nicht zurück gegeben. Sollte PHP nicht abbrechen wird dein Browser, wie oben bereits gesagt, wegen eines Cache Problems streiken.


PHP Code:
$start 0;
$einträge_pro_seite 10;
$query "SELECT * FROM Tabelle LIMIT $start,$einträge_pro_seite"
Nun könntest du mittels JS bzw AJAX bei einem bestimmten Event (Bsp Scrollen an das Ende der Seite) deine Query erneut senden mit neuen werten ($start nach oben setzen) und diese dann anzeigen.

Weitere Verbesserung wäre statt "*" , lediglich die Spalten auswählen die du auch brauchst.
Sind insgesamt 90 Spalten -> Ganze Tabelle
04/23/2014 10:37 Sebbix#6
Wenn du wirklich alle brauchst, dann eben "*".

ansonsten halt:

PHP Code:
$query "SELECT id,typ FROM tabelle"
04/23/2014 10:39 VisionEP1#7
Das was du suchst nennt sich Limit,

Also ein Generator der halt folgendes generiert:
SELECT column_name(s)
FROM table_name
LIMIT number;

Evtl Tabelle auswählen und halt welche spalten der user sehen will.
Das Limit kannst du auch als Einträge pro Seite sehen.

Angenommen du setzt Limit = 100;
Und hättest 5000 Einträge.
Könntest du unten halt Seite 1-50 begutachten.(phpmyadmin wäre evtl eine überlegung wert? )

Aber du solltest evtl. nochmal daran denken das man kaum. 100 Einträge mit 90 Spalten sinnvoll verwalten kann(von hand).
Evtl nochmal genauere Regeln o.ä. aufstellen.
Was willst du den in der DB speichern wenn man fragen darf ;) `?
04/23/2014 10:47 €clips3#8
Quote:
Originally Posted by VisionEP1 View Post
Das was du suchst nennt sich Limit,

Also ein Generator der halt folgendes generiert:
SELECT column_name(s)
FROM table_name
LIMIT number;

Evtl Tabelle auswählen und halt welche spalten der user sehen will.
Das Limit kannst du auch als Einträge pro Seite sehen.

Angenommen du setzt Limit = 100;
Und hättest 5000 Einträge.
Könntest du unten halt Seite 1-50 begutachten.

Aber du solltest evtl. nochmal daran denken das man kaum. 100 Einträge mit 90 Spalten sinnvoll verwalten kann(von hand).
Evtl nochmal genauere Regeln o.ä. aufstellen.
Was willst du den in der DB speichern wenn man fragen darf ;) `?
Mithilfe der Datenbank verwalte ich Portale, Kontaktinformationen etc.

Ich muss sogesehen auf alle Daten zugreifen können(zwecks filter), deswegen dachte ich Limit wäre dafür nicht geeignet.
Aber wenn ich das richtig verstehe willst du drauf raus, dass ich hier ein code wie diesen verwende:

Code:
$start = 0;
$einträge_pro_seite = 10;
$query = "SELECT * FROM Tabelle WHERE Tabelle.Filterspalte = Filterwert LIMIT $start,$einträge_pro_seite";
?

€: Wobei ich persönlich eine Lösung Ohne Seiten bevorzugen würde.
04/23/2014 11:12 VisionEP1#9
Ja das wäre meine Idee gewesen.
EIne Lösung ohne Seiten o.ä. wird nicht gehen da du nicht jdesmal 250mb laden kannst ;)
Wenn du portale etc verwalten willst sollte doch phpmyadmin gehen oder?
04/23/2014 11:17 €clips3#10
Quote:
Originally Posted by VisionEP1 View Post
Ja das wäre meine Idee gewesen.
EIne Lösung ohne Seiten o.ä. wird nicht gehen da du nicht jdesmal 250mb laden kannst ;)
Wenn du portale etc verwalten willst sollte doch phpmyadmin gehen oder?
Klar, aber ich habe hier 2 Leute Sitzen die keinerlei Verständnis für diese Art von Logik haben :P
04/23/2014 12:08 Sebbix#11
Wobei "Select *" immer langsamer ist wie "Select column_name,column_name1[...]".

Evtl solltest du bevor die Einträge angezeigt werden einen Filter setzen lassen, so dass nicht alle Einträge sondern nur die gewünschten angezeigt werden.

Vielleicht solltest du dir auch mal die System Tabellen ansehen.
Mit diesen kommst du (teilweise) schneller zu deinem gewünschten ergebnis.
04/24/2014 09:42 €clips3#12
Quote:
Originally Posted by €clips3 View Post
Klar, aber ich habe hier 2 Leute Sitzen die keinerlei Verständnis für diese Art von Logik haben :P
Abgesehen davon habe ich ja ein funktionierendes System.
Hat jemand nen Plan wie ich diese Seiten Funktion Dynamisch halte?

Statisch würde ich das simple lösen.
Nur da dies ja auch auch verschiedene Filter hat und die Seitenbutton + Tabellen Inhalte automatisch an Filter angepasst werden sollen weiß ich nicht wo ich anfangen soll.
Generell hätte ich schon eine Lösung, umsetzen würde ich Sie auch aber ich denke da gibt es einfachere Optionen als meine Idee

Jemand eine idee?
04/24/2014 11:20 Sebbix#13
Was heisst für dich dynamisch?
Wenn du die Filter in die Query packst wp du LIMIT hast, dann ist das doch schon dynamisch?
04/24/2014 21:10 M4xicaner#14
Ich lehne mich mal weit aus dem Fenster und sage es gibt keine einzige Anwendung, bei der man 80k Datensätze auf einmal benötigt.

Beispiel Kontaktdaten: angenommen, ich habe für jeden Deutschen Kontaktdaten - die will ich aber doch nicht alle sehen! Wenn, dann lasse ich mir z.B. nur die Handynummern aller Frauen zwischen 18 und 24 Jahren in Castrop-Rauxel anzeigen. Dann kommen nicht so enorme Datenmengen zustande, die ausgegeben werden müssen.

Ich lese so zwischen den Zeilen, dass du mit Javascript filterst. Baue diese Filter direkt in die Datenbankabfrage ein.

mfg
04/26/2014 12:16 €clips3#15
Quote:
Originally Posted by M4xicaner View Post
Ich lehne mich mal weit aus dem Fenster und sage es gibt keine einzige Anwendung, bei der man 80k Datensätze auf einmal benötigt.

Beispiel Kontaktdaten: angenommen, ich habe für jeden Deutschen Kontaktdaten - die will ich aber doch nicht alle sehen! Wenn, dann lasse ich mir z.B. nur die Handynummern aller Frauen zwischen 18 und 24 Jahren in Castrop-Rauxel anzeigen. Dann kommen nicht so enorme Datenmengen zustande, die ausgegeben werden müssen.

Ich lese so zwischen den Zeilen, dass du mit Javascript filterst. Baue diese Filter direkt in die Datenbankabfrage ein.

mfg
Ja, habe da ne coole alternative gefunden. Ich hab mich bisschen falsch ausgedrückt.

Hab das System komplett nochmal umgeschrieben und nutze nun auch asp.net dafür.

Zudem das Telerik Framework und da ist meine Anwendung simple umzusetzen.

Danke trotzdem an alle :)