Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    MySQL: tabelle temporanee

    Ho una pagina in cui costruisco delle schede tecniche tramite un form e ajax. Dato che ci sono molti dati da tenere in "memoria" fin quando l'utente salva la scheda completa, ho pensato di utilizzare una tabella temporanea di appoggio e poi al momento del salvataggio di portare tutti i dati sulla tabella definitiva.

    Ho alcuni dubbi:

    - la tabella temporanea esiste esclusivamente per la sessione dell'utente che la crea oppure esiste comunque per qualsiasi altro utente collegato? Per cui non è esclusiva della sessione ma è comunque globale?
    - la durata della tabella da chi è dettata? ovvero sono l'utente A che apre la pagina e crea la tbl_temp. Arriva l'utente B che apre la pagina e crea/utilizza la tabella esistente (credo che la utilizzi in quanto esiste anche la clausola IF NOT EXISTS). Quando l'utente A chiude la pagina la tabella resta comunque viva?
    - sempre sulla durata della tabella, essa muore alla chiusura della pagina, dopo x tempo o alla chiusura della sessione sul sito?

    grazie
    ciao

  2. #2
    in questo caso non stai parlando di una tabella temporanea nel senso del db (che vive giusto il tempo di esecuzione del comando sql), ma di una tabella temporanea nel senso "umano" del termine - parliamo di tabella d'appoggio; quindi (dal punto di vista del db) è una tabella come tutte le altre, che dovrai gestire da programma. Per l'univocità, usa il nome utente nel nome della tabella (quindi se sei l'utente "pippo" avrai ad esempio la tabella "tbl_tmp_pippo").

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Non so se ho capito bene. Intendi dire che in un caso del genere dovrei creare e distruggere una tabella 'reale' sul db da programma?

    Ovvero:

    CREATE ... tbl_nome...

    varie INSERT e DELETE

    ed al salvataggio il DROP della tabella?

    Ho capito giusto?

    E se sì allora non capisco la tabella creata con CREATE TEMPORARY... che collocazione abbia.

  4. #4
    Originariamente inviato da aasmdaa
    E se sì allora non capisco la tabella creata con CREATE TEMPORARY... che collocazione abbia.
    ma tu pensa, basterebbe leggere il manuale

    http://dev.mysql.com/doc/refman/5.1/...ate-table.html

    You can use the TEMPORARY keyword when creating a table. A TEMPORARY table is visible only to the current connection, and is dropped automatically when the connection is closed. This means that two different connections can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.) To create temporary tables, you must have the CREATE TEMPORARY TABLES privilege.

    Dato parli di "pagine" immagino che sia una applicazione web, che lavora in modalità disconnessa, dove quindi le connessioni si aprono e chiudono a go-go. Le conclusioni arrivano da sole

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da optime
    ... dove quindi le connessioni si aprono e chiudono a go-go...
    non è così semplice, in quanto le sessioni mysql non corrispondono necessariamente alle "sessioni" web, le quali (tipicamente) sono "sessioni" php / apache (questo può capitare, ad esempio, se il server mysql vede una singola connessione lato-php con un singolo utente. Dipende dalle implementazioni)
    ---
    Per avere la certezza di non correre rischi puoi, brutalmente, usare una tabella MEMORY (non ti interessa mantenerla) nella quale metti un campo (chessò TOKEN), corrispondente alla sessione "logica", UUID.

    Non ti serve quindi minimamente creare e droppare tabelle.
    Ti serve una tabella temporanea (RAM), chiamala che ne so "lavororam", deve fai le insert e alla fine una DELETE from lavororam where TOKEN='uuidgeneratoprima';

    Un'ulteriore precisazione: i lock sulle tabelle MEMORY sono globali (non sulle righe), il che può dare rallentamenti in casi di concorrenza estrema.
    Nella maggior parte dei casi ciò non avviene (le tabelle RAM sono mooolto più veloci di quelle vere); tuttavia se vuoi privilegiare la concorrenza alla velocità ti tocca usare una tabella "fisica" innodb.

    Con magari un meccanismo temporizzato ogni tot che la svuota (in maniera analoga alle tabelle-sessioni che usualmente si usano per php)

  6. #6
    quindi la MEMORY table si comporta esattamente come una tabella fisica, solo che il suo contenuto risiede in memoria.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Avete entrambi azzeccato i problemi in quanto l'applicazione è web e lavora disconnessa per cui di fatto la tabelle temporanee non le posso utilizzare per questo scopo.

    Utilizzerò proprio una tabelle di tipo Memory come consigliato da franzauker con l'id di sessione o di utente come identificativo univoco.

    Preziosa anche il chiarimento sul lock delle tabelle di tipo memory. Comunque non sarà sicuramente un caso di concorrenza estrema.

    Ora vado a leggermi il manuale sulla tabelle memory così evito di porre domande inutili...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.