Pergunta : Problema com indicações seletas do volume alto

Eu escrevi um alimentador da sessão do PHP do costume que usasse a identificação da sessão do defeito mas lojas a informação de sessão em uma base de dados de MySQL. O local que funciona o gerente trata aproximadamente os visitantes 30k um o dia, cada qual geram a sessão aproximadamente 5 escrevem e as consultas na sucessão muito rápida devido a AJAX pedem. A mesma edição levantou-se using o usuário do MS SQL como uma plataforma do armazenamento. O problema ocorre na sessão escreve. A função da escrita tenta primeiramente encontrar uma entrada existente na tabela da sessão com a identificação da sessão (usada como a chave preliminar) e então inserções ou atualizações o registro conformemente. Ocasionalmente (1%-5% da sessão escrevem) a consulta inicial volta vazio mesmo que a sessão não seja nova, e há uma fileira na base de dados unida à identificação da sessão a lógica a seguir tenta introduzir um novo recorda, simplesmente para funcionar afoul do confinamente da unicidade da chave preliminar. Isto causa a falha inaceitável. A falha é segurada relativamente graciosa, mas fornece uma experiência significativamente degradada do usuário. Depois que muitas tentativas de resolver a edição, mim foram mal sucedidas. A tabela está usando InnoDB como um motor e utf8_general_ci como um jogo de caracteres. A correia fotorreceptora app está funcionando na estrutura de Zend e está usando a funcionalidade do DB da estrutura. O problema ainda ocorre quando as conexões reglar do mysqli são empregadas preferivelmente. Toda a introspecção seria apreciada extremamente. O código de Psuedo para a sessão escreve é fornecido abaixo. class= " lineNumbers " >
1 do >
function do " prettyprint " " do class= do id= " codeSnippet766935 do >
query (sql); // volta ocasionalmente com 
                           o resultado nulo de // ajustou-se mesmo que
                           o registro da sessão de // existe
    se (contagem (fileiras) > 0)
        updateRecord (identificação, sessionData);
    mais
        // tenta então introduzir a fileira duplicada
        insertNewRecord (identificação, sessionData);
    retorno;
class= > " desobstruído " de 
class= do

Resposta : Problema com indicações seletas do volume alto

1 - Ao se tratar a atualização com perguntas do SQL, testa o impato de
INTRODUZIR O *** NO *** DA ATUALIZAÇÃO DUPLICADA DA CHAVE

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

2 - Desde que você está segurando paralelamente $_SESSION e cópias do sql de dados de sessão, você pôde considerar armazenar a identificação do sql nos dados de $_SESSION
Quando você está fazendo o primeiro escreve a inserção?
Em alguns casos $_SESSION é atualizado somente depois que a página é deixada…

3 - Parece que você está jogando realmente em uma área perigosa onde o sincronismo preciso não seja garantido realmente e onde você deve conseqüentemente esperar lotes dos problemas.
Eu tentaria reconsiderar e atualizar dados de sessão somente em alguns eventos significativos, de modo que toda a pergunta psta em esconderijo do SQL tivesse algum tempo para executar. Seu sistema seria então mais robusto, e a carga no usuário igualmente deixaria cair significativamente.
Ou ter algum $_SESSION prender o timestamp da última atualização e actualizá-lo somente depois 2 segundos
Sure, não muito Ajax-como mas hey, isto depende de seu usuário do SQL e do esforço que você o põr sobre. Os microssegundos ou mesmo as atualizações do milli- ou dos centi-segundos são muito bem para Ajax, mas não para o usuário do SQL
Outras soluções  
 
programming4us programming4us