Hej <b>jag fick höra att om man spara trädet i databasen , sköter databasen själv detta problem,</b> Tack så väldigt mycket, Du kan t.ex. skriva en egen hantering för att låsa vid editering. TACK, Man kan väl tänka sig ungefär samma funktionalitet som vissa sourcecontrolsystem har.modifiering av en fil samtidigt av flera användare
Jag har en treeview som är en xml fil som laddas,
varje gång en anvädare laddar trädet en xml fil laddas via en "web service".
Man skulle ändra trädet så att lägga till och ta bort noder och spara ändringarna i xml filen så att nästa gång när man laddar trädet ändringarna har sket.
jag har fixat det , problemet är att vad händer om 1000 användare samtidigt ändrar trädet och sparar den.
hur man fixar det.?
jag fick höra att om man spara trädet i databasen , sköter databasen själv detta problem,
om jag anävder ms sqlserver 2000 hur ska jag fixa hierarkin?
tack allaSv: modifiering av en fil samtidigt av flera användare
Nope... Du har fortfarande ett concurrencyproblem att ta hand om oavsett om du spara i en fil eller på en databas och det sköter databsen inte själv.
Ett enkelt sätt att göra det är med följande tabelldesign:
<code>
Treenode int
Parenttreenode int
Name Varchar(50)
</code>
Data kommer att se ut så här:
1, 1, 'MinToppnode'
2, 1, 'en undernode'
3, 3, 'en annan toppnode'
4, 2, 'en undernode till en undernode'
Med concurrencyproblem menar jag följande:
1. Användare A laddar ner trädet från servern via webtjänsten
2. Användare B laddar ner trädet från servern via webtjänsten
3. Användare B bestämmer sig för ta bort noden 'en undernode' som har id 2 och tar bort den tillsammans med ALL undernoder (dvs även noden 'en undernode till en undernode' med id 4 tas bort ur db eller fil)
4. Användare A ändrar namn på 'en undernode till en undernode' med id 4 till 'en lattjo undernode'...
I steg 4 kommer det att skita sig eftersom dess parentnode inte finns kvar i databsen eller filen längre. Lösningen kan, men behöver inte vara, att använda sig av timestampkolumn. Användaren kan då få ett felmeddelande som berättar vad som har hänt, att någon annan har pillat med det data som han har vill uppdatera.
Sv:modifiering av en fil samtidigt av flera användare
du skrev "lösningen kan, men behöver inte vara, att använda sig av timestampkolumn"
finns det en bättre lösning ? eller en annan lösning.?Sv: modifiering av en fil samtidigt av flera användare
Men först kanske du ska fundera över varför två användare ändrar på samma sak samtidigt.
Det låter konstigt att två personer skall sitta och förändra exakt samma informationsmängd precis samtidigt. Vad är det för slags process man ska stödja då?
I den verkliga världen skulle ju ingen komma på tanken att föreslå att vi två ska skriva in siffror i samma deklarationsblankett samtidigt.. ;)
Om du har en Treeview där varje gren i trädet motsvaras en post i en databas med ett unikt ID, kan du ju ganska lätt ordna så att två personer kan ändra i trädet samtidigt utan att det blir något fel i trädet för andra användare som har öppnat trädet för redigering.
Om de ändå ska ändra på samma gren samtidigt har du två val:
1. Den som sparar sist vinner
(det brukar räcka i t.ex ett kundregister. Om en kundpost ändras så är förmodligen de uppgifter som de båda användarna sparar ungefär samtidigt korrekta, t,ex, kundens nya gatuadress. Då spelar det ingen roll att Anv_A's uppgifter skrevs över av Anv_B)
2. En hantering där du informerar användaren om att någon annan har varit där och ändrat. Med lämpliga val t.ex.. att kunna se det som är ändrat innan man bestämmer sig för att skriva över eller ångra sig.
3. Specialfall som ska resultera i avbrott. T.ex.
T1. kolla att pengar finns på kontot. T2. Utföra transaktion. T3. När pengar ska dras saknas täckning eftersom alla pengar tagits ut mellan T1 och T2. Avbryt pga fel.
Det finns ingen automagisk lösning utan man måste från fall till fall bestämma sig för vilken nivå man behöver. Och programmera den.Sv:modifiering av en fil samtidigt av flera användare
tänk om att medan användare1 har laddat hem trädet och läggt till eller ändrat ett löv, har användare2 tagit bort lövet,
vad händer om anvädare1 klickar på save?Sv: modifiering av en fil samtidigt av flera användare
När användare A laddar ner trädet får han med en checksumma (som genereras på något sätt).
Om användare B också laddar ner och modifierar trädet innan användare A hinner spara sina ändringar så gör man en kontroll av checksumman från användare A innan man trycker in den i databasen och vägrar ifall ursprungsversionens checksumma skiljer sig från den aktuella checksumman?