2010-07-11 22 views
7

Quindi, ad esempio, l'utente sta effettuando l'accesso e il sistema sta memorizzando informazioni su di loro esempio: birth date, quindi è più veloce ottenere queste informazioni dalla sessione o interrogare il database per esso?Le sessioni sono più veloci delle query sul database?

La mia idea era che l'utente debba effettuare il login una volta sola e la sessione è sempre lì, ma se interrogassi il database, se l'utente ricarica la pagina, il sistema ha bisogno di interrogare ancora e ancora, invece di ottenere i dati da un 'luogo' temporaneo.

Uso PHP e MySQL.

+0

Che linguaggio di programmazione e dbms usi? –

+0

Ho modificato la mia risposta. – Adam

risposta

9

Per quasi tutte le lingue e database, sì. Solitamente una sessione utente viene semplicemente salvata in memoria, e prenderla in mano è solo una questione di ricerca. Un accesso al database di solito comporta alcune comunicazioni socket con un processo diverso. Piuttosto pesante in confronto.

+2

Per quanto ne so, le sessioni in PHP sono memorizzate nei file per impostazione predefinita, non in memoria. Per ogni colpo questo file di sessione deve essere letto dal filesystem e analizzato in array PHP. Hai ragione, la sessione dovrebbe essere più veloce, ma la ragione è che devi caricare i dati della sessione dell'utente per altri motivi e il birtday di cui parla sarà già lì - non c'è bisogno di chiedere al database. – dwich

1

Come state facendo tutto? Il modo per farlo è verificare le credenziali dell'utente nella pagina di accesso e sì, è necessario effettuare una query per verificare se i criteri specificati dall'utente corrispondono nel database. Se lo fanno, li memorizzi in sessione e poi continui in base a quella sessione.

Quindi, non si tratta di confronto, è necessario effettuare una query del database una volta nella pagina di accesso e utilizzare la sessione in seguito.

pagina di login

// database query run once only at this page 
// if user exits, you store it into session else redirect with an error message 
+0

So come farlo, la mia domanda è stata più veloce della query del database o meno :) – Adam

+1

@ CIRK: Certo, la sessione è più veloce ma devi anche tenere conto della sicurezza. – Sarfraz

+0

Grazie, la sicurezza è un argomento completamente nuovo, grazie per averlo detto, ho creato una nuova domanda per verificarlo: http: //stackoverflow.com/questions/3224286/php-what-are-the-risks-of-php-sessions – Adam

0

In realtà, la risposta di Carl non è completamente corretta, e dicendo "MySQL" non aiuta.

Vedete, i sistemi di database come mysql hanno "motori di archiviazione". Questi di solito scrivono su file, ma ce ne sono alcuni che scrivono in memoria (MEMORY), altri scrivono memoria ma conservano un backup di file (MyISAM) e alcuni in/dev/null (BLACKHOLE).

Quindi tutto dipende dal motore di memorizzazione:

  • MyISAM - Motore predefinito a partire da MySQL 3.23 con grandi prestazioni
  • MEMORY - Hash base, memorizzato nella memoria, utile per le tabelle temporanee
  • InnoDB - Supporta operazioni, il blocco a livello di riga, e chiavi esterne
  • BerkeleyDB - supporta le transazioni e livello di pagina bloccaggio
  • BLACKHOLE -/dev/motore di archiviazione null (qualsiasi cosa si scrive ad esso scompare)
  • ESEMPIO - motore di memorizzazione Esempio
  • ARCHIVIO - motore di archiviazione
  • CSV - motore di archiviazione CSV
  • ndbcluster - cluster,, tabelle di memoria basata fault-tolerant
  • FEDERATED - federata MySQL storage engine
  • MRG_MYISAM - Raccolta di tabelle MyISAM identiche
  • ISAM - motore di memorizzazione Obsoleto

(lista da PhpMyAdmin Elenco delle voci)

+0

quindi se uso 'MEMORY', funzionerà come il' SESSION'? – Adam

+0

questa "risposta" è al massimo supplementare e non affronta la domanda. – rvdavid

+0

@rvdavid - Risponde alla domanda, l'OP deve solo scegliere un'opzione. – Christian

Problemi correlati