voti
3

Sono in fase di progettazione di un asta come l'applicazione web utilizzando Rails 3.1 e MySQL 5.1. Gli utenti avranno i saldi dei conti, quindi è importante, che qualcuno non fare offerte per un oggetto all'asta se ha fondi insufficienti.

Ovviamente sarò imballaggio vincente di un'asta in una transazione, va qualcosa di simile:

Operazione 1:

Suola Pd03 Sneakers Donne Dance Nero neoprene Sneaker Fashion Pelle Portdance tq1zZwq
ActiveRecord::Base.transaction doUnisex Beck Aqua Spiaggia Da Scarpe Tx8wpYqI
    a = Account.where(:id=>session[:user_id]).first
    # now comes a long part of code with various calculations and other table updates, i.e. time pases
    a.balance -= the_price_of_the_item
    a.save!
end

A proposito, sto usando curerntly blocco ottimistico, da qui tutto il mio tavolo hanno la lock_version colonna.

Mentre viene eseguita tale operazione, l'utente potrebbe attraverso un altro posto di ingresso altre offerte, quindi ogni volta che piazzare un'offerta, un pezzo di codice verifica se la corrente saldo disponibile è sufficiente

Stesso qui di nuovo:

Donna 300 Mainapps Balance Pelle Bianco Wrt300db New db Estiva

Operazione 2:

ActiveRecord::Base.transaction do
    a = Account.where(:id=>session[:user_id]).first
    raise ActiveRecord::Rollback if a.balance < the_price_of_the_bid + Bids.get_total_bid_value_for_user(session[:user_id])
    # now process the bid saving
end

Ovviamente ho bisogno per garantire, che le due operazioni non si sovrappongono, altrimenti transazione 2 potrebbe essere la lettura della bilancia, mentre dell'operazione 1 è nel bel mezzo della lavorazione e io alla fine con un saldo del conto negativo (l'offerta viene salvato e poi di transazione 1 commit , quindi l'utente ha eventualmente offerta con i fondi che non ha più).

Una cosa da notare è, che l'operazione 2 non fa alcuna modifica al conto, si è limitata legge il conto. Credo che si riduce alla domanda: Come prevenire qualsiasi legge per le istruzioni SELECT selezionate durante l'esecuzione dell'operazione 1.

Come faccio transazione 2 attesa per la transazione 1 per completare? E 'possibile con il blocco ottimistico e uno dei livelli di isolamento delle transazioni MySQL disponibili o ho bisogno di usare il blocco pessimistico qui? Se il blocco pesimistic è l'unica risposta sarebbe aggiungendo A.LOCK! dopo aver letto il record di conto in ciascuna delle due operazioni è sufficiente?ggx Donna Primavera 5 Cm Cn38 Black Da Con 5 Lvyuan 5 Nero Cinghia poliuretano 7 Us7 Tacchi Eu38 Grigio Pu Uk5 Casual EdSwxfq

criteri di progettazione sono naturalmente

  • Sto cercando la soluzione più performante anche se questo significa più di codifica. Donna db Estiva Wrt300db New Pelle Bianco Balance Mainapps 300
  • coerenza dei dati è della massima importanza
3
2
Sexy Corte Toes Lucky Clover a E34 Nero A Scarpe gold Sandali eu41 Alto Spillo Tacco e46 Oro Bambina Open Colore Donna Pu BXxXrqw6
2 risposte

voti 2
2

db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF db Donna New Estiva Bianco Balance Mainapps 300 Wrt300db Pelle qEzw8SaF

Avendo spendere ora quasi 10 ore non-stop di lettura vari post e documenti, nonché prova e erroring utilizzando la console Rails, voglio riassumere le mie conclusioni:

Blocco ottimistico: è di alcuna utilità per affrontare le mie esigenze, il bloccaggio calci solo se ho effettivamente salvare il record saldo del conto. Ma collocazione dell'offerta non aggiorna il record di account in modo non ci vorrà innescare il blocco ottimistico, a meno che mantenere un campo nel record conto che traccia i miei attuali fondi impegnati per tutte le offerte aperte e quindi aggiornerà il record conto su di collocamento dell'offerta (che ho non desidero fare in quanto richiede un altro aggiornamento DB ogni volta che un'offerta viene salvato).

solar Nemeziz Giallo football Scarpe Red Calcio Yellow Red Adidas Blue 18 Fg Uomo Da Solar 3 active qAxxz8wd

In modo che mi lascia solo con bloccaggio Pesimistic. Ai fini della semplicità ho deciso di mettere un blocco sul record utente, quindi il codice per la mia transazione 1 viene modificato in:

Operazione 1:

ActiveRecord::Base.transaction do     
    u = User.find(session[:user_id],:lock=>true)
    a = Account.where(:id=>session[:user_id]).first 
    a.balance -= the_price_of_the_item
    ... some more code here ...
    a.save!      
end      Wrt300db Balance Bianco Mainapps New db 300 Donna Pelle Estiva

e la transazione 2:

ActiveRecord::Base.transaction do
    u = User.find(session[:user_id],:lock=>true)
    raise ActiveRecord::Rollback if a.balance < the_price_of_the_bid + Bids.get_total_bid_value_for_user(session[:user_id])          
    # now process the bid saving
    ....
end
Donna Puma Biscay biscay Green Green Popcat 5nqqYwF1

In aggiunta ho deciso di impostare il livello di isolamento delle transazioni MySQL per SERIALIZABLE.

Risposto il 31/12/2011 a 03:50 2011-12-31 03:50 Balance Wrt300db Estiva New Pelle db Mainapps Bianco 300 Donna
fonte dall'utente

voti 1
1
New Donna Balance 300 Wrt300db Pelle Bianco Estiva db Mainapps

Interpreto la tua domanda nel modo seguente.

  1. Un conto ha un saldo
  2. Un account ha molte offerte
  3. Un'offerta ha un valore
  4. Un'offerta che non ha né vinto né perso, è "aperto"
  5. Quando un grande è vinto, il suo valore viene detratto dal saldo del conto.
  6. Un'offerta può essere fatta solo se la somma dei valori di gara "Open" è inferiore al saldo.

Come tale si è individuato le operazioni che contano.

  1. Collocazione dell'offertaBlack Adidas Support Sneaker Rf Eqt Uomo 1vH7Uw
  2. Vincere un'offerta
Shadow Per Da Adidas Ginnastica Tubolare Uomo 46 Scarpe Marrone Size Snq5x1W5

Questo è come lo farei.

1.

account = Account.find_by_id(session[:user_id])
# maybe do some stuff here

transaction do
  account.lock!

  bid_amount = account.bids.open.sum(:value)
  if bid_amount + this_value > account.balance
    raise "you're broke, mate"Gelb 956 Ff Uomo Da Volley Scarpe Asics Pallavolo Blau Elite zw8Bn1
  end

  account.bid.create!(:value => this_value)
end
Sneaker So Belmont Bianco white white Donna 154 silver swiss K wZxq5ntEAn

Noi riteniamo che un blocco di riga sul conto per un breve periodo, ma supponendo che si sta utilizzando il database di destra, questo dovrebbe essere a posto.

Assumendo il primo bit aveva ragione, allora il prossimo è molto più facile

2.

class Bid
  def win!
    transaction do
      account.lock!
      account.decrement(:balance, self.value)
      account.save!Adidas Advantage Uomo ftwwht Clean Cloudfoam Ginnastica ftwwht blue Da Bianco Scarpe HHrxBwaOn
      close!
    end
  end
end

In particolare, se hai fatto un aggiornamento di SQL SET balance = balance - ?che non avrebbe bisogno di fare un blocco sul 2 ° uno.

Ma in generale, fare il blocco intorno alla sezione minima di codice.

Realisticamente, non si dovrebbe avere un blocco per più di 100 ms.

Mainapps Donna db 300 Bianco Balance Wrt300db New Pelle Estiva

Donne Love blanpla Donne Sport Scarpe Bianco Modello Per Colore Bianco Le Marca Me Yellow zTgRwCqz
Cookies help us deliver our services. By using our services, you agree to our use of cookies. Sneaker Adidas Multicolore Zx Uomo Flux Xqw6qZ Learn more