|
| Hvordan gør man sit program til et Fra : Michael Sørensen |
Dato : 20-12-09 00:52 |
|
Hej.
Spørgsmålet er måske ikke så simpelt, men i hovedtræk: Hvad skal man
være OBS og samt gøre anderledes, hvis man vil have sit program til at
virke i et fler-bruger miljø?
Man hører tit folk sige, "Husk nu at være opmærksom på, om det kan køre
med flere brugere" men hvad dækker det over.
| |
Stig Johansen (20-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 20-12-09 05:15 |
|
Michael Sørensen wrote:
> Man hører tit folk sige, "Husk nu at være opmærksom på, om det kan køre
> med flere brugere" men hvad dækker det over.
Det dækker over brugen af fælles data.
Hvis det f.eks. er et program til vedligeholdelse af kunder, skal man sikre
sig, at nogle måske ikke har adgang, andre kan se, men ikke rette, og
andre kan oprette/rette.
Endvidere skal man via låsninger eller lign. sikre sig, at der ikke er to
der retter det samme på samme tid.
--
Med venlig hilsen
Stig Johansen
| |
Michael Sørensen (20-12-2009)
| Kommentar Fra : Michael Sørensen |
Dato : 20-12-09 23:08 |
|
Stig Johansen skrev:
> Michael Sørensen wrote:
>
>> Man hører tit folk sige, "Husk nu at være opmærksom på, om det kan køre
>> med flere brugere" men hvad dækker det over.
>
> Det dækker over brugen af fælles data.
> Hvis det f.eks. er et program til vedligeholdelse af kunder, skal man sikre
> sig, at nogle måske ikke har adgang, andre kan se, men ikke rette, og
> andre kan oprette/rette.
>
> Endvidere skal man via låsninger eller lign. sikre sig, at der ikke er to
> der retter det samme på samme tid.
Hej Stig.
Tak for dit svar. Det var lærerigt.
Delen omkring sikring af brugergrupper mht. adgang osv. ser ud til at
være til at gå til.
Har du mulighed for at skitsere et eksempel på afsnittet omkring låsning.
Jeg kan sagtens følge tankegangen i ideen, men hvordan det gøres i
praksis er jeg bange for, at jeg mangler.
| |
Stig Johansen (21-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 21-12-09 05:08 |
|
Michael Sørensen wrote:
> Har du mulighed for at skitsere et eksempel på afsnittet omkring låsning.
>
> Jeg kan sagtens følge tankegangen i ideen, men hvordan det gøres i
> praksis er jeg bange for, at jeg mangler.
Det kommer helt an på hvilke data - og databaser, der er tale om, og er
formentlig individuelt for de givne applikationer.
Hvis det er flade filer som man brugte i 'oldtiden', så findes der noget
lock/unlock.
Nogle desktop databaser har det vist også, men de er generelt ikke gode til
flerbrugersystemer (Paradox,Access og den dur).
Rigtige databser har ikke et egentlig lock directive, men her bruger man
typisk:
begintrans
- opdater noget
- opdater noget mere
if dataOK then
committrans
else
rollbacktrans
Gennem de sidste 25 år (for mit vedkommende) har diskussionen så været eks:
Hvad hvis bruger A henter en kunde til rettelse, og bruger B henter den
samme til rettelse.
Her kommer det subjektive ind, hvor jeg mener at hvis det kan lade sig gøre,
så har man et problem med sin forretningsgang, og derfor plejer jeg at lave
det så den sidste 'får ret' - dvs begge får rettet, men den sidste
overskriver den anden.
Nogle databaser kan lave en sådan lock, og jeg har også set systemer hvor
det er brugt (Maconomy f.eks.).
Her er det rigtig sjovt nå en bruger har hentet noget på sin skærm, og er
gået til frokost
Man kan sagtens lave noget pseudo lock ved at indføre et felt på tabellen,
eks. islocked, og teste på dette ved hent af en record.
Hvis man gør det, skal man huske at lave en facilitet, så 'låsninger' kan
slettes, da uaftoriseret nedlukning af et program vil efterlade orphan
'locks'.
Men den fundamentale problemstiling er det med opdatering af flere tabeller.
For at illustrere, kan vi tage udgangspunkt i en konto og posteringer.
For hver transaktion skal saldoen opdateres på kontoen, og en postering
indsættes.
Her skal enten begge ske, eller ingen, for ellers stemmer tingene ikke.
Det er i disse situationer begintrans/commit kommer ind i billedet, for de
sørger for
1) Enten alt eller intet bliver udført
2) Der er ikke 2 brugere, der kan udføre samme transktion på samme tid
(implicit låsning).
--
Med venlig hilsen
Stig Johansen
| |
Michael Sørensen (21-12-2009)
| Kommentar Fra : Michael Sørensen |
Dato : 21-12-09 19:03 |
|
Stig Johansen skrev:
> Michael Sørensen wrote:
>
>> Har du mulighed for at skitsere et eksempel på afsnittet omkring låsning.
>>
>> Jeg kan sagtens følge tankegangen i ideen, men hvordan det gøres i
>> praksis er jeg bange for, at jeg mangler.
>
> Det kommer helt an på hvilke data - og databaser, der er tale om, og er
> formentlig individuelt for de givne applikationer.
>
> Hvis det er flade filer som man brugte i 'oldtiden', så findes der noget
> lock/unlock.
>
> Nogle desktop databaser har det vist også, men de er generelt ikke gode til
> flerbrugersystemer (Paradox,Access og den dur).
>
> Rigtige databser har ikke et egentlig lock directive, men her bruger man
> typisk:
> begintrans
> - opdater noget
> - opdater noget mere
> if dataOK then
> committrans
> else
> rollbacktrans
>
> Gennem de sidste 25 år (for mit vedkommende) har diskussionen så været eks:
> Hvad hvis bruger A henter en kunde til rettelse, og bruger B henter den
> samme til rettelse.
>
> Her kommer det subjektive ind, hvor jeg mener at hvis det kan lade sig gøre,
> så har man et problem med sin forretningsgang, og derfor plejer jeg at lave
> det så den sidste 'får ret' - dvs begge får rettet, men den sidste
> overskriver den anden.
>
> Nogle databaser kan lave en sådan lock, og jeg har også set systemer hvor
> det er brugt (Maconomy f.eks.).
>
> Her er det rigtig sjovt nå en bruger har hentet noget på sin skærm, og er
> gået til frokost
>
> Man kan sagtens lave noget pseudo lock ved at indføre et felt på tabellen,
> eks. islocked, og teste på dette ved hent af en record.
>
> Hvis man gør det, skal man huske at lave en facilitet, så 'låsninger' kan
> slettes, da uaftoriseret nedlukning af et program vil efterlade orphan
> 'locks'.
>
> Men den fundamentale problemstiling er det med opdatering af flere tabeller.
> For at illustrere, kan vi tage udgangspunkt i en konto og posteringer.
>
> For hver transaktion skal saldoen opdateres på kontoen, og en postering
> indsættes.
>
> Her skal enten begge ske, eller ingen, for ellers stemmer tingene ikke.
>
> Det er i disse situationer begintrans/commit kommer ind i billedet, for de
> sørger for
> 1) Enten alt eller intet bliver udført
> 2) Der er ikke 2 brugere, der kan udføre samme transktion på samme tid
> (implicit låsning).
>
Hej Stig.
Jeg siger endnu engang tak for et lærerigt svar.
Michael.
| |
Nico de Jong (21-12-2009)
| Kommentar Fra : Nico de Jong |
Dato : 21-12-09 22:11 |
|
"Michael Sørensen" <Spam@nej.tak> skrev i en meddelelse
news:4b2fb847$0$8550$ba624c82@nntp06.dk.telia.net...
> Stig Johansen skrev:
>> Michael Sørensen wrote:
>>
>>> Har du mulighed for at skitsere et eksempel på afsnittet omkring
>>> låsning.
>>>
>>> Jeg kan sagtens følge tankegangen i ideen, men hvordan det gøres i
>>> praksis er jeg bange for, at jeg mangler.
>>
>> Det kommer helt an på hvilke data - og databaser, der er tale om, og er
>> formentlig individuelt for de givne applikationer.
>>
Da jeg rodede med systemer a la det beskrevne, havde vi en anden løsning,
der var dikteret af det faktum at vores maskine (en IBM 360/40) kun havde
128K hukommelse, og 4x 7.25MB diskplads. Der var altså ikke plads for SQL
tabeller eller tilsvarende.
Vi brugte index-sequentielle filer, der blev opdateret om natten og dermed
implicit var urørlige om dagen. Opdateringer klaredes ved at lave 1 record
per opdatering, og så blev recorden skrevet "ved siden af". Man skrev
naturligvis kun de felter der skulle opdateres. Dette gjorde så, at flere
kunne opdatere samtidig, så længe de ikke rettede i samme felt. Når man så i
løbet af dagen skulle lave et opslag, kiggede man først i den
index-sequentielle fil, og så lkiggede man i filen med opdateringer, der
iøvrigt også var indexeret. Så kørte man det hele sammen om natten in et
batch-job. Fungerede fortræffeligt.
Nico
| |
Stig Johansen (22-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 22-12-09 05:12 |
|
Nico de Jong wrote:
> Da jeg rodede med systemer a la det beskrevne, havde vi en anden løsning,
> der var dikteret af det faktum at vores maskine (en IBM 360/40) kun havde
> 128K hukommelse, og 4x 7.25MB diskplads. Der var altså ikke plads for SQL
> tabeller eller tilsvarende.
> Vi brugte index-sequentielle filer, der blev opdateret om natten og dermed
> implicit var urørlige om dagen.
Det må vist være fortid.
Jeg har de sidste ca. 30 år brugt HP's IMAGE (netværksdatabase).
Det er heller ikke SQL baseret, men med primitiver som:
DBLOCK(...
DBGET(..
vis skærm
læs skærm
DBUPDATE(...
DBUNLOCK(...
Dog bruger jeg ikke denne metodik, for det giver netop problemstillingen med
at en lås er udtaget i alt for lang tid mellem vis og læs skærm (specielt
hvis brugeren går til frokost).
--
Med venlig hilsen
Stig Johansen
| |
Nico de Jong (22-12-2009)
| Kommentar Fra : Nico de Jong |
Dato : 22-12-09 09:38 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:4b304793$0$271$14726298@news.sunsite.dk...
> Nico de Jong wrote:
>
>> Da jeg rodede med systemer a la det beskrevne, havde vi en anden løsning,
>> der var dikteret af det faktum at vores maskine (en IBM 360/40) kun havde
>> 128K hukommelse, og 4x 7.25MB diskplads. Der var altså ikke plads for SQL
>> tabeller eller tilsvarende.
>> Vi brugte index-sequentielle filer, der blev opdateret om natten og
>> dermed
>> implicit var urørlige om dagen.
>
> Det må vist være fortid.
Enig. Jeg taler her om slutningen af 60'erne. Der fandtes databasesystemer,
men de var yderst begrænsede og kun kunne køre ordentligt på maskiner med
mindst 256K. Jeg tænker her på BOMP (Bill Of Material Processor *), DBOMP,
og forfaderen til DL/I, der pudsigt nok også hed DL/I. Ja, I griner nok nu,
men den mindste maskine jeg har brugt, stod hos Dansk Arbejdsgiverforening.
Den var på hele 28K, og var en 360/25 med 2 harddiske (7,25 MB hver) og 4
tapestationer. Så skulle jeg lave løn- og mandtalsstatistik, og så fik jeg
bevilget udviddelse af hukommelsen med hele 4 (fire) K. Og det var dengang
man _lejede_ hukommelse. Så kunne jeg også lave histogrammer på en
linieprinter (IBM 1403).
* BOMP håndterede styklister, men kun til (svjh) 3 niveauer ned.
Nico
| |
Stig Johansen (22-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 22-12-09 11:30 |
|
Nico de Jong wrote:
> Enig. Jeg taler her om slutningen af 60'erne. Der fandtes
> databasesystemer, men de var yderst begrænsede og kun kunne køre
> ordentligt på maskiner med mindst 256K. Jeg tænker her på BOMP (Bill Of
> Material Processor *), DBOMP, og forfaderen til DL/I, der pudsigt nok også
> hed DL/I. Ja, I griner nok nu,
Nej, jeg griner ikke.
Et af mine første projekter (inden for denne genre) var netop at lave
styklistenedbrydning, eller 'Bill Of Material', og efterfølgende rollup.
Rollup skulle bruges for at beregne materialeomkostninger (og
produktionesomkostninger) under givne forudsætninger.
I det projekt var det COBOL, og der var udfordringen at lave en rekursiv
'stack'.
--
Med venlig hilsen
Stig Johansen
| |
Nico de Jong (22-12-2009)
| Kommentar Fra : Nico de Jong |
Dato : 22-12-09 12:36 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:4b30a01f$0$279$14726298@news.sunsite.dk...
> Nico de Jong wrote:
>
>> Enig. Jeg taler her om slutningen af 60'erne. Der fandtes
>> databasesystemer, men de var yderst begrænsede og kun kunne køre
>> ordentligt på maskiner med mindst 256K. Jeg tænker her på BOMP (Bill Of
>> Material Processor *), DBOMP, og forfaderen til DL/I, der pudsigt nok
>> også
>> hed DL/I. Ja, I griner nok nu,
>
> Nej, jeg griner ikke.
> Et af mine første projekter (inden for denne genre) var netop at lave
> styklistenedbrydning, eller 'Bill Of Material', og efterfølgende rollup.
>
> Rollup skulle bruges for at beregne materialeomkostninger (og
> produktionesomkostninger) under givne forudsætninger.
>
> I det projekt var det COBOL, og der var udfordringen at lave en rekursiv
> 'stack'.
>
>
Det med at grine var ikke møntet på dig, men på de yngre folk der læser med.
Jeg brugte også Cobol på det projekt, blandet med en pæn portion Assembler.
Der skulle jo spares på hukommelsen
Den dag idag gør det billedligt talt ondt, når jeg ser hvordan der svines
med hukommelsen, og hvor ineffektivt der kodes, men det er jo en helt anden
historie.
Nico
| |
Stig Johansen (22-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 22-12-09 12:59 |
|
Nico de Jong wrote:
> Den dag idag gør det billedligt talt ondt, når jeg ser hvordan der svines
> med hukommelsen, og hvor ineffektivt der kodes, men det er jo en helt
> anden historie.
Du er ikke alene.
Jeg tænker nogle gange på hvordan man måtte kode effektivt for at have 200+
brugere kørende samtidigt på en 'kværn' med 8MB (ja 8*MB*) hukommelse.
Desværre er det nok en glemt disciplin, for der er jo 'hukommelse nok' og
'power nok', for det 'koster ingenting'.
Men det har medført uhørt stort strømforbrug osv...
--
Med venlig hilsen
Stig Johansen
| |
Nico de Jong (22-12-2009)
| Kommentar Fra : Nico de Jong |
Dato : 22-12-09 13:29 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:4b30b4e4$0$275$14726298@news.sunsite.dk...
> Nico de Jong wrote:
>
>> Den dag idag gør det billedligt talt ondt, når jeg ser hvordan der svines
>> med hukommelsen, og hvor ineffektivt der kodes, men det er jo en helt
>> anden historie.
>
> Du er ikke alene.
> Jeg tænker nogle gange på hvordan man måtte kode effektivt for at have
> 200+
> brugere kørende samtidigt på en 'kværn' med 8MB (ja 8*MB*) hukommelse.
>
> Desværre er det nok en glemt disciplin, for der er jo 'hukommelse nok' og
> 'power nok', for det 'koster ingenting'.
>
> Men det har medført uhørt stort strømforbrug osv...
>
> --
Helt enig, igen. Måske burde sådan noglen gamle r...... som os skrive en bog
om det, krydret med anekdoter fra det virkelige liv.
Nico
| |
Kurt G (26-12-2009)
| Kommentar Fra : Kurt G |
Dato : 26-12-09 21:31 |
|
"Nico de Jong" <nico@farumdata.dk> skrev i en meddelelse
news:7pbsc8FtuaU1@mid.individual.net...
> "Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
> news:4b30b4e4$0$275$14726298@news.sunsite.dk...
KLIPPET
> Helt enig, igen. Måske burde sådan noglen gamle r...... som os skrive en
> bog om det, krydret med anekdoter fra det virkelige liv.
>
> Nico
Det er nu hyggeligt at 'høre' på den slags nostalgi!
Jeg er køber til jeres bog.
Mvh Kurt
| |
Stig Johansen (26-12-2009)
| Kommentar Fra : Stig Johansen |
Dato : 26-12-09 23:23 |
|
Kurt G wrote:
> Det er nu hyggeligt at 'høre' på den slags nostalgi!
> Jeg er køber til jeres bog.
Hvis jeg skulle skrive en bog om hvad jeg har rodet med af EDB de sidste 30
år, og det tager 3 gange så lang tid at skrive, så vil den først udkomme i
år 2100 :)
--
Med venlig hilsen
Stig Johansen
| |
Uffe Kousgaard (22-12-2009)
| Kommentar Fra : Uffe Kousgaard |
Dato : 22-12-09 14:19 |
|
"Nico de Jong" <nico@farumdata.dk> wrote in message
news:7pbp9gFctqU1@mid.individual.net...
>
> Det med at grine var ikke møntet på dig, men på de yngre folk der læser
> med.
Der er sgu' da ingen yngre folk i en pascal-gruppe.....
| |
Ukendt (22-12-2009)
| Kommentar Fra : Ukendt |
Dato : 22-12-09 18:28 |
|
"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:4b30c749$0$271$14726298@news.sunsite.dk...
> "Nico de Jong" <nico@farumdata.dk> wrote in message
> news:7pbp9gFctqU1@mid.individual.net...
>>
>> Det med at grine var ikke møntet på dig, men på de yngre folk der læser
>> med.
>
> Der er sgu' da ingen yngre folk i en pascal-gruppe.....
27 år og allerede gammel
| |
|
|