Frage : Mühe mit Volumen-auserwählten Aussagen

Ich geschrieben eine Gewohnheits-PHP-Lernabschnittzufuhr, die die Rückstellungslernabschnittidentifikation aber die Speicher die Lernabschnittinformationen in einer MySQL Datenbank benutzt. Der Aufstellungsort, der den Manager laufen lässt, behandelt ungefähr Besucher 30k ein Tag, von dem jeder Lernabschnitt ungefähr 5 schreibt erzeugen und Nachschlagen in der sehr schnellen Reihenfolge wegen AJAX verlangt. Die gleiche Ausgabe entstanden using Mitgliedstaat-SQL-Server als Speicherplattform. Das Problem auftritt auf Lernabschnitt schreibt bt. Die schreibenfunktion versucht zuerst, eine vorhandene Eintragung in der Lernabschnitttabelle mit der Lernabschnittidentifikation zu lokalisieren (verwendet wie der Primärschlüssel) und dann entweder Einsätze oder Updates die Aufzeichnung dementsprechend. Gelegentlich (1%-5% des Lernabschnittes schreibt), zurückkommt das Anfangsnachschlagen leer kkommt, obwohl der Lernabschnitt nicht neu ist, und es gibt, eine Reihe in der Datenbank, die zur Lernabschnittidentifikation die Logik dann beigefügt, versucht, einen neuen Rekord einzusetzen, nur, um verwirrtes der Primärschlüsseleinzigartigkeitbegrenzung laufen zu lassen. Dieses verursacht nicht annehmbaren Ausfall. Der Ausfall behandelt verhältnismäßig würdevoll, aber liefert eine erheblich verminderte Benutzererfahrung. Nachdem viele Versuche, die Ausgabe zu lösen, ich erfolglos gewesen. Die Tabelle verwendet InnoDB als Maschine und utf8_general_ci als Zeichensatz. Die Netz-APP läuft auf Zend Rahmen und verwendet die DB-Funktionalität des Rahmens. Das Problem auftritt noch ch, wenn reglar mysqli Anschlüsse anstatt eingesetzt. Jeder möglicher Einblick geschätzt sehr. Psuedo Code für den Lernabschnitt schreiben zur Verfügung gestellt unten.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function sessionWrite (Identifikation, sessionData)
    sql = „1 von den Lernabschnitten in denen sessionId = Identifikation vorwählen“;
    Reihen = db->query (sql); // zurückkommt gelegentlich mit kkommt 
                           //-ungültiges Resultat einstellte obwohl hl
                           //-Lernabschnittaufzeichnung existiert
    wenn (Zählimpuls (Reihen) > 0)
        updateRecord (Identifikation, sessionData);
    sonst
        // versucht dann, doppelte Reihe einzusetzen
        insertNewRecord (Identifikation, sessionData);
    Rückkehr;

Antwort : Mühe mit Volumen-auserwählten Aussagen

1 - Wenn es das Update mit SQL-Fragen, prüfen die Auswirkung von behandelt
*** AUF DOPPELTER SCHLÜSSEL-UPDATE *** EINSETZEN

CF http://dev.mysql.com/doc/refman/5.0/fr/insert.html

2 - Da Sie parallel $_SESSION und sql-Kopien von Lernabschnittdaten behandeln, konnten Sie die, sql-Identifikation in die $_SESSION Daten zu speichern erwägen
Wann tun Sie das erste schreiben Einsatz?
In einigen Fällen ist $_SESSION modernisiert, erst nachdem die Seite gelassen…

3 - Es scheint, dass Sie wirklich in einem gefährlichen Bereich spielen, in dem exaktes TIMING nicht wirklich garantiert und wo Sie Lose Mühen folglich erwarten sollten.
Ich versuchen, Lernabschnittdaten nur bezüglich einiger bedeutender Ereignisse nachzuprüfen und zu aktualisieren, damit jede mögliche cachierte SQL-Frage einige Zeit gehabt durchzuführen. Ihr System sein dann robuster, und die Last auf dem Bediener fallen auch erheblich.
Oder irgendein $_SESSION haben, den Zeitstempel des letzten Updates zu halten und erst nach 2 Sekunden zu aktualisieren
Sure nicht sehr Ajax-wie aber he, abhängt dieses von Ihrem SQL-Server und vom Druck z, die Sie an ihn setzen. Mikrosekunden oder sogar milli- oder Centisekunden Updates sind fein für Ajax, aber nicht für SQL-Server
Weitere Lösungen  
 
programming4us programming4us