Cuestión : Apuro con declaraciones selectas en grandes cantidades

He escrito a tratante de la sesión del PHP de la aduana que utiliza la identificación de la sesión del defecto pero almacenes la información de sesión en una base de datos de MySQL. El sitio que funciona con al encargado maneja áspero los visitantes 30k al día, que generan la sesión áspero 5 escriben y las operaciones de búsqueda en la sucesión muy rápida debido a AJAX piden. La misma edición se ha presentado usar el servidor del ms SQL como plataforma del almacenaje. El problema ocurre en la sesión escribe. La función de la escritura primero intenta localizar una entrada existente en la tabla de la sesión con la identificación de la sesión (usada como la llave primaria) y entonces los partes movibles o las actualizaciones el expediente por consiguiente. (1%-5% de la sesión escribe) las operaciones de búsqueda iniciales se vuelven de vez en cuando vacío aunque la sesión no es nueva, y hay una fila en la base de datos atada a la identificación de la sesión la lógica después intenta insertar un nuevo récord, sólo para funcionar afoul de constreñimiento de la unicidad de la llave primaria. Esto causa falta inaceptable. La falta se maneja relativamente agraciado, pero proporciona una experiencia perceptiblemente degradada del usuario. Después de que muchas tentativas de resolver la edición, yo hayan sido fracasadas. La tabla está utilizando InnoDB como motor y utf8_general_ci como juego de caracteres. La tela app está funcionando en el marco de Zend y está utilizando la funcionalidad del DB del marco. El problema todavía ocurre cuando las conexiones reglar del mysqli se emplean en lugar de otro. Cualquier penetración sería apreciada grandemente. El código de Psuedo para la sesión escribe se proporciona abajo. class= " lineNumbers " >
1 del >
function del " prettyprint " del class= del id= " codeSnippet766935 " del >
query (sql); // se vuelve de vez en cuando con 
                           el resultado nulo de // fijó aunque
                           el expediente de la sesión de // existe
    si (cuenta (filas) > 0)
        updateRecord (identificación, sessionData);
    
        // entonces intenta insertar fila duplicado
        insertNewRecord (identificación, sessionData);
    vuelta;
class= > " claro " de 
class= del

Respuesta : Apuro con declaraciones selectas en grandes cantidades

1 - Al dirigirse la actualización con preguntas del SQL, prueba el impacto de
INSERTAR EL *** EN *** DE LA ACTUALIZACIÓN DEL ARTÍCULO CON VALORES IDENTICOS DE VALIDACIÓN

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

2 - Puesto que usted está manejando paralelamente $_SESSION y copias del sql de los datos de sesión, usted puede ser que considere almacenar la identificación del sql en los datos de $_SESSION
¿Cuándo usted está haciendo el primer escribe el parte movible?
$_SESSION es en algunos casos actualizado solamente después que se deja la página…

3 - Parece que usted está jugando realmente en un área peligrosa donde la sincronización exacta no se garantiza realmente y donde usted debe por lo tanto contar con porciones de apuros.
Intentaría reconsiderar y poner al día datos de sesión solamente sobre algunos acontecimientos significativos, de modo que cualquier pregunta depositada del SQL haya tenido cierto tiempo para ejecutar. Su sistema entonces sería más robusto, y la carga en el servidor también caería perceptiblemente.
O tener algún $_SESSION el sostener del reloj fechador de la actualización pasada y el ponerse al día solamente después de 2 segundos
Sure, no muy Ajax-como pero hey, esto depende de su servidor del SQL y de la tensión que usted la pone. Los microsegundos o aún las actualizaciones del milli- o de los centi-segundos están muy bien para Ajax, pero no para el servidor del SQL
Otras soluciones  
 
programming4us programming4us