php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #46 (permalink)  
Alt 30-05-2007, 16:38
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja, aua - aber geht

OffTopic:
Wie würdest du die last-activity eines Users speichern?
Weil, anhand dieses wertes wird bei jedem Select nach User-Daten (das sind viele, weil social networking plattform) entschieden, ob der user noch online ist, oder nicht...

Mit Zitat antworten
  #47 (permalink)  
Alt 30-05-2007, 16:49
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:
Zitat:
Original geschrieben von prego
Wie würdest du die last-activity eines Users speichern?
Weil, anhand dieses wertes wird bei jedem Select nach User-Daten (das sind viele, weil social networking plattform) entschieden, ob der user noch online ist, oder nicht...
Also wir hatten es mal so gelöst, dass in der Session ein timestamp war und sobald der älter als X Minuten war, wurde der Timestamp in der DB upgedated

Mittlerweile (wie ich gerade feststellen durfte -_-) wird diese Spalte wohl nur beim Login upgedated, die eigentliche Funktionalität bezüglich welcher User online ist, wird über das FS direkt auf dem Webserver gelöst (Kombination aus touch und filemtime) ... was ich davon halte, behalte ich jetzt mal für mich -.-
Mit Zitat antworten
  #48 (permalink)  
Alt 30-05-2007, 16:58
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:
Danke, das ist sehr interessant.
Wenn ich es aber richtig deute sind wohl beide Wege im Zuge der Funktionalität und des Pragmatismus entstanden

Mit Zitat antworten
  #49 (permalink)  
Alt 30-05-2007, 20:52
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Den Ansatz mit der vergangenen Zeit halte ich (in PHP) aber durchaus für den richtigen.

Oft genug sind Besucher deutlich unter 10 sek auf einer Seite. (überlegt mal, wie lange ihr für nen Post im Forum braucht)
Dann kommt es nur noch darauf an, wie man online/offline definiert. bei 5 Minuten z.B. kann man schon einige Requests sparen.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #50 (permalink)  
Alt 31-05-2007, 10:28
web4free
 Newbie
Links : Onlinestatus : web4free ist offline
Registriert seit: Jun 2005
Beiträge: 108
web4free ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Kurzer Statusbericht was sich gestern Abend noch alles verbessert hat.
Also ich habe soweit es mir hier geraten wurde, die Werte richtig übernommen.
Leider mußte ich diesen Index über die 3 Spalten wieder setzen, weil mir auch wieder eingefallen ist, dass ich den ja bei den Imports benötige, da sonst die Importe länger dauern als die veranschlagten 9 Minuten.
Alle 10 Minuten läuft der Cron der einen frischen Import anstößt.
Da mir da gestern 2 Importe länger als 10 Minuten gedauert hatten, hatte ich auf einmal 3 Importe paralell am laufen.
Naja viel sag ich jetzt nicht dazu - ich war nur froh dass es bereits 2h in der Früh war, wo eh sehr wenig los ist.

Aber seit ich diesen Index wieder drinnen habe, geht es sich schön aus und die Datenbank verbratet wesentlich weniger an CPU Last.
Heute bestelle ich ja unseren 2. Server der dann Sklave ist und nur robotten darf mit den Importen, somit fällt mir die Last die das Script welches die Importe verarbeitet auch wieder weg.
Da kommt dann wirklich nur noch die Last, wenn ich das SQL-File in die DB einspiele.

Und dazu gäbe es gleich noch eine Frage von mir bzg. des Befehls "LOAD DATA INFILE"
Ich hab das erst ein einziges mal in meinen Leben genutzt.
Wäre diese Variante nicht die Beste für mich als hier mit einen sehr langen INSERT und ewig vielen UPDATES zu arbeiten??

Ich schau mir grad die Dokumentation an und stelle fest, dass es hier ja auch ein REPLACE gäbe.

Und genau jetzt scheitere ich bzw. jetzt werde ich eine dieser 08/15 Frage stellen.
Zitat:
Wenn Sie REPLACE angeben, ersetzt die Eingabe vorhandene Datensätze. Dies betrifft Datensätze, die denselben Wert bei einem Primärschlüssel oder einem eindeutigen Index wie die neuen Datensätze haben.
Wenn ich das richtig verstehe gebe ich für meine INSERT Datensätzen ein 'NULL' ein für die ID, während ich für die UPDATE-Datensätze die 'id' eintrage die ja bekannt ist.

Zitat:
Geben Sie CONCURRENT bei einer MyISAM-Tabelle an, die die Bedingungen für gleichzeitige Einfügeoperationen erfüllt (d. h. keine freien Blöcke in der Mitte enthält), dann können andere Threads Daten aus der Tabelle abrufen, während LOAD DATA ausgeführt wird. Die Verwendung dieser Option beeinflusst die Leistungsfähigkeit von LOAD DATA auch dann geringfügig, wenn gleichzeitig kein anderer Thread die Tabelle verwendet.
Freie Blöcke?? Ist damit eine Spalte gemeint, in der kein Wert steht??
Oder macht es überhaupt keinen Sinn diese Option mit einzusetzen?

Jedenfalls bin ich jetzt schon sehr zufrieden mit dem Ergebnis

Geändert von web4free (31-05-2007 um 10:41 Uhr)
Mit Zitat antworten
  #51 (permalink)  
Alt 01-06-2007, 01:59
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

"Freie Blöcke" meint wohl solche: http://de.wikipedia.org/wiki/Datenblock
Mit Zitat antworten
  #52 (permalink)  
Alt 01-06-2007, 02:23
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von web4free
Leider mußte ich diesen Index über die 3 Spalten wieder setzen, weil mir auch wieder eingefallen ist, dass ich den ja bei den Imports benötige, da sonst die Importe länger dauern als die veranschlagten 9 Minuten.
Alle 10 Minuten läuft der Cron der einen frischen Import anstößt.
Da mir da gestern 2 Importe länger als 10 Minuten gedauert hatten, hatte ich auf einmal 3 Importe paralell am laufen.
Vielleicht solltest du, wo du eh gerade am optimieren bist, das auch mal optimieren. Also ein Cron der alle 10 Minuten läuft, sollte nicht auf einem solch abartigen Key setzen müssen x_X
Mit Zitat antworten
  #53 (permalink)  
Alt 01-06-2007, 08:39
web4free
 Newbie
Links : Onlinestatus : web4free ist offline
Registriert seit: Jun 2005
Beiträge: 108
web4free ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von onemorenerd
"Freie Blöcke" meint wohl solche: http://de.wikipedia.org/wiki/Datenblock
Na ich bin mir nicht sicher ob es das was damit zu tun haben soll?!
Ich vermute eher als Datenblock einen leeren Spaltenblock

Mein Insert könnte so aussehen:
INSERT VALUE(NULL,wert1,wert2,wert3,...);

Und jetzt das Beispiel wie ich es verstehe, dass es nicht sein darf:
NULL;wert1;;wert3;.....
Hier fehlt der wert2 - und das dürfte damit gemeint sein, bin mir aber eben nicht sicher.


Zitat:
Vielleicht solltest du, wo du eh gerade am optimieren bist, das auch mal optimieren. Also ein Cron der alle 10 Minuten läuft, sollte nicht auf einem solch abartigen Key setzen müssen x_X
Ja hab ich mir auch schon überlegt, komm aber leider auf keinen gescheiteren Nenner.
Beim Import eines einzelnen Fahrzeuges frage ich anhand von 3 Werten ab, ob der vielleicht schon in der DB steht.
Das ist: Username, int.Nummer und Exporteur
Somit finde ich das richtige Fahrzeug ohne versehendlich von einen anderen Händler das Fahrzeug zu ändern.
Und meine Überlegung war da halt dieser Index.
Ich sehe keine andere Möglichkeit um an die eindeutige DatensatzId rannzukommen.
Mit Zitat antworten
  #54 (permalink)  
Alt 01-06-2007, 08:56
web4free
 Newbie
Links : Onlinestatus : web4free ist offline
Registriert seit: Jun 2005
Beiträge: 108
web4free ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich hab aber gerade eine andere Idee geboren.
Was wenn ich noch eine zusätzliche Spalte anlege in der ich als MD5 String User, Int.Nummer und Exporteur reinschreibe und nur dieser den Index gebe?

Beispiel:
PHP-Code:
md5('UserInt.NummerExporteur'); 
So hätte ich eine Spalte mit immer exakten 32 Zeichen, welche ja auch eindeutig wären.
Klingt vielleicht komisch aber ich denke dass ich hier sicher damit den Index über die 3 Spalten nicht mehr brauchen würde und das ganze auf einen 32 Zeichen Index beschränke.
Mit Zitat antworten
  #55 (permalink)  
Alt 01-06-2007, 10:12
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Mach diese Spalte auf jeden Fall unique. MD5 ist nicht kollisionsfrei.
Mit Zitat antworten
  #56 (permalink)  
Alt 01-06-2007, 10:17
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Oder gleich sha1() (hat 40 Zeichen, demnach ein paar mehr Möglichkeiten)

Oder auch ganz simpel ein auto_increment unsigned int~ (der wie ich sehe schon vorhanden ist)


Wieso hast du denn nicht die ID im Cronjob zum Finden des Datensatzes, sondern nur die 3 Spalten des Index?
Mit Zitat antworten
  #57 (permalink)  
Alt 01-06-2007, 11:11
web4free
 Newbie
Links : Onlinestatus : web4free ist offline
Registriert seit: Jun 2005
Beiträge: 108
web4free ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Wieso hast du denn nicht die ID im Cronjob zum Finden des Datensatzes, sondern nur die 3 Spalten des Index?
Das wäre mir ja eh das liebste, nur wie komme ich easy an die ID rann??
Ich erklär ganz kurz nur was da eigendlich bei einen Import passiert.

Ich bekomme von einen x-beliebigen Autohändler ein ZIPfile im Mobile.de oder Autoscout24 Format.
Das heißt in diesem ZIP-File befinden sich das gesamte Bildmaterial aller seiner Fahrzeuge und ein CSV-File in dem die Liste der Fahrzeuge samt Konfiguration des jeweiligen Fahrzeuges drinnen steht.
Hier habe ich keine eindeutige ID welche mit der ID in meiner DB übereinstimmen könnte.

Ich habe im Prinzip bei diesem CSV File genau einen Punkt an den ich mich halten kann und das ist die Interne Nummer die der Händler seinen Fahrzeug verpasst hat. Theoretisch auch noch den Hersteller und das Modell - aber bei 2 unterschiedlichen Fahrzeugen wird nie die selbe Int.Nummer vergeben. Auch kann es vorkommen das überhaupt keine interne Nummer drinnen steht. (Da komm ich grad auf einen Bug von mir )
Von wo das File gekommen ist (Exporteur) und wie der Username lautet weiß ich ja.

Und nun gehts darum, ob ein Fahrzeug völlig neu ist oder sich zB. nur der Preis oder die Bilder bei einen bereits bestehenden Fahrzeug geändert hat.
Somit muß ich erst mal dieses KFZ anhand der 3 Dinge in der DB suchen um dann agieren zu können.

Zu Beginn unseres Projektes hatte zuerst den gesamten Fuhrpark des Händlers auf den Status 0 gesetzt und dann einen kompletten Neueintrag gemacht - also keine Updates.
Nachteil an der Sache war, dass kaum war ein Inserat von Google gespidert und gelistet, war dieses eigendlich auch schon wieder nimmer gültig weil sich die ID geändert hatte.
Ausserdem schicken die meisten Händler nur beim allerersten Import alles Bildmaterial mit und dann nur noch Updatebilder zu bestimmten Fahrzeugen und nicht immer alles.

Nur die interne Nummer als index oder unique herannzuziehen wäre fatal, weil andere Händler über den selben Exporteur ggf. die selbe interne Nummer haben könnten.

Soviel mal zum winzigsten Teil eines solchen Importes.

Geändert von web4free (01-06-2007 um 11:17 Uhr)
Mit Zitat antworten
  #58 (permalink)  
Alt 01-06-2007, 11:18
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also die Username-Spalte könnte auch immer noch zu einem int werden, was die Sache schon mal merklich vereinfachen würde...
Dann könnte man einen Key auf user_id und interne-nr und die ersten paar Stellen des Exporteurs setzen und das ganze sollte schon mal schneller sein ... oder auch bei der internen-nr nur die ersten paar Stellen von der varchar-Spalte
Mit Zitat antworten
  #59 (permalink)  
Alt 01-06-2007, 11:51
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn du mehrere Spalten zum PrimaryKey zusammen fassen kannst, also definieren kannst das diese Spalten Kombination einen Datensatz ein-eindeutig ausmachen, dann kannst du auch mit INSERT ON DUPLICATE KEY UPDATE arbeiten.

Damit sparst du dir deinen vorhergehenden Select und machst im Endeffekt das selbe wie mit REPLACE - ich hab nur die Erfahrung gemacht, das INSERT ON DUPLICATE KEY UPDATE schneller ist als REPLACE.

Hab mich allerdings jetzt nicht komplett in deine DB-Struktur eingelesen - von daher nur als Idee zu verstehen.
Mit Zitat antworten
  #60 (permalink)  
Alt 01-06-2007, 12:53
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also einen Primary-Key auf eine Kombination aus 3 Varchar-Spalten zu legen - davon rate ich jetzt mal spontan ganz dolle ab oO
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:42 Uhr.