Questione : Multifilo e fila chiudere sopra seleziona

Ciao là, il

this è una domanda ragionevolmente generale ed alcuni indicatori, esempi o collegamenti alle lezioni private sarebbero great.

I avévano progettato una base di dati che è schierata in un ambiente multi-threaded del Java. Basicamente, ci sono servizi del Java che stanno funzionando costantemente sopra la base di dati, controllando per vedere se ci sono nuovi record, aggiornante li etc.

I hanno realizzato il deposito Procs per tutti gli aggiornamenti, ottengono ecc ed hanno tutto transazioni interne spostate all'interno del proc del deposito. Finora così buon.  Tuttavia la mia principale preoccupazione è come faccio arresto un'annotazione o forse le annotazioni in alcune tabelle che ottengono aggiornate fra il tempo I “selezionano„ i dati a partire da loro all'aggiornamento di tempo I realmente l'annotazione e commettono la transazione. Per quanto sono informato la transazione non dà dei calci dentro, fino ad un aggiornamento, alla cancellazione o l'inserto è denominato la parte interna il trasporto clause.

So che un esempio cliente del be

Table ha 2 annotazioni come so
AccID, il nome di cliente, Balance
1020, John Smith, €-128.00
1057, canna di INIZIO di Mike, €5839,00

I hanno alcuni servizi funzionare sopra queste tabelle che osservano per fare le mansioni differenti sul records.
John Smith sono nel colore rosso, ma un legare è venuto attraverso per alcuni fondi in modo da i fondi dell'aggiornamento di servizio sta andando aggiungere €1000 nel suo account.
In il mio proc di stor voglio aggiungo un'annotazione per i fondi aggiunti ad una tabella e aggiornare la tabella di cliente. Comincio una transazione. Così allora faccio un equilibrio prescelto dal cliente ed ottengo €-128.  Allora genero l'annotazione del legare nella tabella di WireDetails e vado aggiornare l'equilibrio nel accounts.

How faccio io arresto un altro serivice che entra e fare cambia alla tabella di cliente, poichè ho scelto soltanto da it.

Sorry per l'esempio sciocco ma spero che vediate che cosa è che I, m. che prova ad arrestare… il
thanks M
class= del

Risposta : Multifilo e fila chiudere sopra seleziona

Diciamolo hanno tabella la t (i int non nulla, un carbone (1))
inserire nella t selezionano 1, “a„

filettare le edizioni A1 questo:

cominciare la transazione
REGOLARE RIPETIBILE DEL LIVELLO DI ISOLAMENTO DI TRANSAZIONE COLTO
selezionare * a partire dalla t dove i=2


ed allora si siede appena là. Avanti viene il filetto B e le edizioni

selezionare * a partire dalla t dove i=2
aggiornare il a='c stabilito di t in cui i=2


Il primo di queste dichiarazioni della b riuscirà, ma quella seconda attenderà fino al filetto A ha pubblicato commette. Ci è un problema tuttavia: è facile da vedere che la B può ignorare facilmente il cambiamento fatto da A, se si comporta basante su che cosa vede quando ha richiamato la fila. , Per quel motivo è migliore pubblicare

a='c stabilito dell'aggiornamento t dove i=2 e a='a

Ciò verifica efficace che la B stia aggiornando che cosa pensa che stia aggiornando. E questo è esattamente come il cursore cliente-basato sta funzionando, che è il tipo più usuale del cursore utilizzato in odierni strumenti di sviluppo, particolarmente del web: nessuna transazione, nessuna serratura, ma durante la verifica dell'aggiornamento di tutti i campi che sono stati letti e se c'è ne cambi, quindi del messaggio di errore in maniera che un altro utente ha modificato il resultset.

Se volete eliminare questo, quindi dovete pubblicare il livello ancor più restrittivo SERIALIZABLE di isolamento di transazione nel filetto B e non appena leggete le file in A, le aggiornate là usando una certa colonna fittizia appena a questo fine. Allora la B non potrà vedere le file che possono essere modificate da A - che è corretto, perché la B non saprebbe al contrario che queste file ora stanno funzionande sopra dal A. Ma questo naturalmente porta nell'emissione di A che si arresta, andante per il pranzo, ecc, ecc.

Per quel motivo, il cursore cliente-individuato è probabilmente il senso più pratico fare tutto questo, che è perché è oggi il tipo più diffuso di funzionamenti della base di dati.
Altre soluzioni  
 
programming4us programming4us