FAQ |
Kalender |
|
![]() |
#1 | ||
|
|||
Klarade millennium-buggen
|
Tidskrävande kanske tyder på att frågan kan optimeras.
Annars är det bästa normalt att använda de inbyggda transaktionsmöjligheter som databasen erbjuder och INTE hitta på egna busyflaggor för databasen kan oftast hantera detta bättre. Nu vet jag inte hur din fråga är uppbyggd men ett sätt kan vara att uppdatera en post i ttaget i databasen med en updatesats och sedan flagga den med att den är "beräknad". Kod:
-- Har inte kollat syntaxen .... -- tanken är att denna fråga körs många gånger tills alla -- poster blivit uppdaterade med det nya beräknade värdet -- Begin Transaction UPDATE myTable SET oldValue=(Select ... AS NewValue FROM ... WHERE ...) SET UpdatedValueFlagga=Now() WHERE AND ID= ( SELECT TOP 1 ID FROM MyTable WHERE UpdatedValueFlagga IS NULL ) -- End transaction Senast redigerad av Conny Westh den 2010-11-11 klockan 22:35 |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Nykomling
|
Det är inte frågan som är tidskrävande, det är det arbete jag utför på hämtad data. Tror inte jag kan utföra det utan busyflagga eftersom det är uteslutet att låsa tabellen under den långa tid som arbetet med datan tar.
1. Jag hämtar datan 2. Jag arbetar med datan (involverar externa API etc som är tidskrävande) 3. jag uppdaterar datan i min databas med modifierade värden. Har googlat lite mer, vad tror ni om nedanstående approach? BEGIN SELECT * FROM table WHERE x=y AND busy = 0 UPDATE table SET busy = 1 WHERE x=y COMMIT zzzzz beräkning av nya värden zzzzzz UPDATE table SET oldvalue = newvalue, busy = 0 WHERE x=y Då låser jag tabellen endast en kort tid, men säkerställer ändå att inte olika skript arbetar parallellt med samma data. Eller? |
||
![]() |
![]() |
Svara |
|
|