Vraag : Probleem met de Uitgezochte Verklaringen van het Hoge Volume

Ik heb een douanephp zittingsmanager geschreven wat gebruikt standaardzittingsid's maar de zittingsinformatie in een gegevensbestand MySQL opslaat. De plaats die de manager in werking stellen behandelt 30k ruwweg bezoekers een dag, elk waarvan zitting ruwweg 5 schrijft en raadplegingen in zeer snelle successie toe te schrijven aan Ajax- verzoeken produceert. De zelfde kwestie heeft zich gebruikend de Server van lidstaten SQL als opslagplatform voorgedaan. Het probleem komt op zitting voor schrijft. Schrijf de functie eerst probeert om van een bestaande die ingang in de zittingslijst met zittingsidentiteitskaart (als primaire sleutel wordt gebruikt) dienovereenkomstig de plaats te bepalen en toen of tussenvoegsels of updates het verslag. Nu en dan terug (1%-5% van zitting schrijft) de aanvankelijke raadpleging komt leeg alhoewel de zitting niet nieuw is, en er is een rij in het gegevensbestand in bijlage aan zittingsidentiteitskaart De logica probeert dan om een nieuw verslag op te nemen, slechts om afoul van primaire zeer belangrijke uniciteitsbeperking te lopen. Dit veroorzaakt onaanvaardbare mislukking. De mislukking wordt vrij elegant behandeld, maar verstrekt een beduidend gedegradeerde gebruikerservaring. Na vele pogingen om de kwestie op te lossen, ben ik niet succesvol geweest. De lijst gebruikt InnoDB als motor en utf8_general_ci als karakter - reeks. Het Web app loopt op Kader Zend en gebruikt de functionaliteit van OB van het kader. Het probleem komt nog voor wanneer de reglar mysqliverbindingen in plaats daarvan worden aangewend. Om het even welk inzicht zou zeer gewaardeerd worden. De code van Psuedo voor de zitting schrijft hieronder wordt verstrekt.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function sessionWrite (identiteitskaart, sessionData)
    sql = „selecteer 1 van zittingen waar sessionId = identiteitskaart“;
    rijen = db->query (sql); // komt nu en dan terug met 
                           // plaatste het ongeldige resultaat alhoewel
                           // zittingsverslag er bestaat
    als (telling (rijen) > 0)
        updateRecord (identiteitskaart, sessionData);
    anders
        // probeert dan om dubbele rij op te nemen
        insertNewRecord (identiteitskaart, sessionData);
    terugkeer;

Antwoord : Probleem met de Uitgezochte Verklaringen van het Hoge Volume

1 - wanneer het behandeling van test de update met SQL vragen, het effect van
TUSSENVOEGSEL *** OP DUBBELE ZEER BELANGRIJKE UPDATE ***

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

2 - aangezien u in parallelle $_SESSION en sql exemplaren van zittingsgegevens behandelt, zou u kunnen nadenken opslaand sql identiteitskaart in de $_SESSION- gegevens
Wanneer doet u de eerste schrijft tussenvoegsel?
In sommige gevallen wordt $_SESSION bijgewerkt slechts nadat de pagina… wordt verlaten

3 - het schijnt u werkelijk op een gevaarlijk gebied speelt waar de nauwkeurige timing niet werkelijk gewaarborgd is en waar u daarom veel problemen zou moeten verwachten.
Ik zou proberen om zittingsgegevens opnieuw in overweging te nemen en bij te werken slechts over sommige significante gebeurtenissen, zodat om het even welke caching SQL vraag wat tijd heeft gehad uit te voeren. Uw systeem zou dan robuuster zijn, en de lading op de server zou ook beduidend dalen.
Of hebben één of andere $_SESSION die timestamp van de laatste update houden en slechts na 2 seconden bijwerken
Zeker, niet zeer ajax-als maar hey, hangt dit van uw SQL server en spanning af u op het zet. Microseconden of zelfs milli- of de centi-seconden updates zijn fijn voor Ajax, maar niet voor SQL server
Andere oplossingen  
 
programming4us programming4us