Theory Of A Weird Thought - Forms Submission

2

In teoria, se dovessi aprire due computer perfettamente sincronizzati su un sito Web con un modulo. Questo modulo contiene campi in cui, ad esempio, il nome utente deve essere univoco. Supponendo che entrambi i computer abbiano le stesse informazioni sul modulo, in teoria supponiamo che il pulsante di invio sia stato premuto contemporaneamente e che questi due computer abbiano la stessa identica build e velocità di internet e lo stesso tempo di risposta dal server, di cui le informazioni sarebbero state inviate al database e le cui informazioni sarebbero state negate sapendo che il campo del nome utente è unico.

    
posta user2738336 28.10.2013 - 20:15
fonte

2 risposte

5

Dato che entrambe le transazioni raggiungono il DBMS simultaneamente, il meccanismo di controllo della concorrenza del database garantirebbe isolamento delle transazioni, in effetti scegliendo una transazione per precedere l'altra . Dato il vincolo univoco del nome utente, il secondo verrebbe rifiutato.

UPDATE:

In effetti, evitando / affrontando la concorrenza viene fatto al livello più basso, nemmeno a livello di DBMS, ma a livello di CPU. Il puntatore di istruzioni è esattamente questo: punta a una singola istruzione. Anche se i blocchi di istruzioni (e quindi, effettivamente, le transazioni di database "concorrenti") sono intercalati al momento dell'esecuzione, uno precede sempre l'altro o è impegnato per primo, causando il rollback forzato dell'altro. Per completezza:

Concurrent Transaction Processing

When two transactions are being processed against a database at the same time, they are termed concurrent transactions. Although it may appear to the users that concurrent transactions are being processed simultaneously, this cannot be true because the CPU of the machine processing the database can execute only one instruction at a time. Usually, transactions are interleaved, which means that the operating system switches CPU services among tasks so that some portion of each transaction is carried out in a given interval. This switching among tasks is done so quickly that two people seated at browsers side by side, processing the same database, may believe that their two transactions are completed simultaneously; in reality, however, the two transactions are interleaved.

Kroenke & Auer, Database Processing Fundamentals: Design, Implementation (12th Ed.), Part 4 Multiuser Database Processing, p.342

    
risposta data 28.10.2013 - 20:31
fonte
2

Il vincitore sarebbe essenzialmente casuale. Per prima cosa, la richiesta verrà ricevuta.

La definizione di "ricevuto" potrebbe significare molte cose. Se supponiamo che il tuo server elabori tutte le richieste nell'ordine in cui i pacchetti di rete sono stati ricevuti, e non ci sono bug del software, allora una volta che un pacchetto entra nella coda di ricezione del server viene considerato "ricevuto".

Nel modo in cui hai formulato la tua domanda, i pacchetti avranno percorsi diversi per il server e uno finirà inevitabilmente per primo. Tuttavia, anche se entrambi arrivano allo stesso tempo, uno "vincerà" e sarà elaborato per primo.

Leggi il modello OSI per capire come funzionano le reti. Una volta raggiunto il livello fisico, il vincitore è l'elettrone che accede prima all'interfaccia di rete.

    
risposta data 28.10.2013 - 20:25
fonte

Leggi altre domande sui tag