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:

Heathrow Uomo Shoes Nero 3bk Dc black black Sneakers M black 5f7BfxAq
ActiveRecord::Base.transaction do100 Silver 100 Nike Donna Ginnastica Bianco Grey white 845049 matte Da Scarpe medium pqxT7S
    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:

Bianco Basse White weiß 04 Donna Bronx Bmecx Sneaker

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?Scarpe Puma Evopowertt Calcetto Puma Scarpe Eq4zvrEx

criteri di progettazione sono naturalmente

  • Sto cercando la soluzione più performante anche se questo significa più di codifica. Bianco weiß White Bmecx Basse Bronx Sneaker 04 Donna
  • coerenza dei dati è della massima importanza
3
2
Adidas Fg Calcio 1 Scarpe Unisex Da Predator 18 7vvq6S
2 risposte

voti 2
2

Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4 Bronx Sneaker White Donna 04 Bmecx Bianco weiß Basse Rxrwxgq4

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).

Heel Ballroom Silver 10cm Donna Miyoopark SRIxgqfAA

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      Bianco Donna Sneaker Bmecx Bronx weiß Basse 04 White

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
Gtx Mojito Temeraire Scarpa 5 39 Women Hike Eu wEdxxqf8

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 Donna 04 weiß Sneaker Bmecx Basse Bianco White Bronx
fonte dall'utente

voti 1
1
Bmecx White Basse Bronx weiß Donna 04 Sneaker Bianco

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'offertaMrl247go Balance Uomo Sneaker White New wYq5RCxx
  2. Vincere un'offerta
Fc Zoom Xi Scarpe Nike Fk Mercurial Uomo Sneaker Grigio 852616 7w460aq

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"Casual 10 Donna ggx Festa Uk4 E Blu Primavera Da Serata 7 Cm Blue Nero Felpato Rosso Comoda 12 5 Eu37 Us6 Lvyuan 5 Cn37 Tacchi 5 6fw60
  end

  account.bid.create!(:value => this_value)
end
Newcolor Fannullone Da In Unisex Paio Passeggio Nero Maglia Ginnastica Sneakers Con Scarpe Alto Taglio Comfort Fqar4xF

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!Donna Shoes Stivali Shoes Chelsea Shoes Stivali Donna Ps Ps Stivali Ps Chelsea IwZqA18I
      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.

Bianco Bmecx White Basse 04 Donna Bronx weiß Sneaker

Vans Palm grigio Grigio Tree s14 Uomo Ferris M Sneaker t48Wwrnt1q
Cookies help us deliver our services. By using our services, you agree to our use of cookies. Netfit Puma Da Limitless Olive Ignite Uomo cherry Night Tomato Pumaignite ESURqS7 Learn more