254 messaggi dal 01 agosto 2003
Ciao a tutti
ho creato un piccolo gestionale che unisce 8 portinerie di una scuola.
Le movimentazioni sono elevate.

Database mssql.

Ho creato una tabella per ogni portineria.
Quando devo selezionarle tutte uso il comando UNION.

Devo dire che sto abbastanza impazzendo.

Allora la mia domanda e':
se faccio un'unica tabella ed effettuo le selezioni basandomi solo sulle varie utenze?
Pero' tutto rinchiuso in una tabella unica.


Dite che facendo cosi, a lungo andare, diventerebbe lento il database?
Mi conviene rimanere con tabelle divise?

Grazie

victor
66 messaggi dal 09 febbraio 2005
caio,
ti conviene un'unica tabella con un campo che indica a quale portineria si rifesci il dato; tipicamente un ID.

Probabilmente però dovrai rimettere mani al programma già fatto
Modificato da sspintux il 25 luglio 2020 18:21 -
254 messaggi dal 01 agosto 2003
Ciao
grazie

si infatti se metto tutto in un unica tabella devo rimettere mano a gran parte del codice.

Domanda:
avendo un unica tabella, se tanti utenti contemporaneamente (intendo nello stesso istante) eseguono un azione sql (ad esempio un insert), e' matematicamente impossibile che le azioni si accavallino ?

In passato mi e' capitata una cosa simile.
Forse dipendeva da access,
Adesso che uso mssql la cosa penso sia diversa.

Ecco vorrei appunto un parere su questa cosa.

Grazie

victor
66 messaggi dal 09 febbraio 2005
cosa intendi di preciso con "azioni che si accavallano"
254 messaggi dal 01 agosto 2003
intendo dire:

per esempio 3/4 utenti che premono contemporaneamente (intendo nello stesso millesimo di secondo) il tasto insert oppure update.

Mi e' capitato che un utente sovrascrivesse i dati dell'altro utente e viceversa.

Secondo te avendo 8 reception che lavorano contemporaneamente sulla stessa tabella non potrebbe capitare?

Grazie

victor
66 messaggi dal 09 febbraio 2005
Si può capitare; è il problema della "Gestione della concorrenza"
cerca in rete;

uno dei modi di approcciare la questione UPDATE è aggiungere un campo timestamp;

leggi il timestamp
fai update dei campi e nuovo timestamp where timestamp = quello letto prima

se non hai aggiornato nessun record (@@ROWCOUNT=0)
significa che qualcun altro è arrivato prima di te

HTH
Modificato da sspintux il 26 luglio 2020 11:54 -
254 messaggi dal 01 agosto 2003
grazie

oppure si fanno tante tabelle quanti sono gli utenti.

E' una follia pensi?

Se capita un update/insert, lo si fa nella tabella appartenente a quel utente
Se per caso occorre una selezione globale, si fa una selezione con union di tutte le tabelle.

Che ne pensi di questa cosa?

p.s
comunque mi informo sul time stamp

victor
254 messaggi dal 01 agosto 2003
ho letto su questo link
https://docs.microsoft.com/it-it/aspnet/web-forms/overview/older-versions-getting-started/continuing-with-ef/handling-concurrency-with-the-entity-framework-in-an-asp-net-web-application

che i blocchi possono rallentare il db nel caso di tanti utenti


La gestione dei blocchi presenta alcuni svantaggi. La sua programmazione può risultare complicata. Richiede risorse di gestione di database significative e può causare problemi di prestazioni con l'aumentare del numero di utenti di un'applicazione (ovvero, non si adatta alla scalabilità). Per questi motivi non tutti i sistemi di gestione di database supportano la concorrenza pessimistica.


che ne pensi

victor

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.