Avatar billede trumf Nybegynder
07. maj 2006 - 19:51 Der er 17 kommentarer og
1 løsning

Logge alle ændringer i CMS

Hejsa E

Jeg har noget portal hvor der er en del data. Jeg vil gerne have hjælp fra andre, men jeg er lidt øm over mine data og jeg vil gerne have at man gør tingene på min måde, så jeg vil lave et logningssystem så det er nemt at køre en eller flere ændringer tilbage.

Jeg havde forestillet mig noget i stil med at logge alle data som de er nu og så logge alle ændringer på feltniveau derefter.
langt de fleste data kommer fra forudindtastede data, så brugeren bare skal gemme en værdi fra en dropdovn, der så indeholder en talværdi der repræsenterer en tekst. Der er enkelte faste tekstværdier og en del enums. Der er to varchars af maks 255 karakterer og et tekstfelt.
Jeg regner ikke med at gemme tekstværdien da det vil fylde for meget i loggen, men jeg er dog lydhør overfor gode ideer for at gemme ændringer her også.

Jeg havde tænkt på noget i stil med en tabel med en varchar(255) til tekster, en enum til disse og en int til alle tal. På feltet på redigeringssiden vil jeg så sætte en variabel (1, 2, 3) der fortæller om dennes værdi skal gemmes på hhv. en af ovenstående.
Derudover skal der selvfølgelig gemmes noget om hvem der har ændret og dato osv.

Har du nogen erfaring med dette, så vil jeg meget gerne høre din mening om dette, da jeg er i tvivl om det kommer til at fylde for meget og gør det hele langsomt osv. og alt det jeg ikke lige har tænkt igennem. På forhånd tak.
Avatar billede arne_v Ekspert
08. maj 2006 - 01:13 #1
jeg tror at jeg enten ville:

logge alle ændringer til flat file i applikationen og så skrive nogen
log analyzer tools til den

eller ville:

have et versions nummer på alle ting og så aldrig opdatere en række
men kun indsætte en ny med et versionsnummer en højere
Avatar billede trumf Nybegynder
08. maj 2006 - 19:28 #2
Hvorfor en flat file frem for en tabel ?
Avatar billede arne_v Ekspert
08. maj 2006 - 19:31 #3
pro:
  langt mindre overhead
  nemmere at laese for en person

con:
  log analyzeren er en lidt vanskeligere at skrive
Avatar billede trumf Nybegynder
08. maj 2006 - 20:01 #4
Loggen skal også være tilgængelig for brugerne, men kun i webformat, så der vil være en del trafik til den fil. (bare lige for at være helt sikker, så går jeg ud fra at en flat file er en alm. textfil ??)

Jeg følger dig fint, men hvad med en løsning hvor man f.eks. kun gemmer de nyeste data i en tabel og lægger gamle data i en xml fil. f.eks. at jeg kun gemmer de ændringer som ikke er godkendt af mig i en tabel og resten i xml.
Avatar billede trumf Nybegynder
08. maj 2006 - 20:03 #5
Hvor mange rækker kan der være i en myISAM tabel før det går ud over hastigheden ?
Avatar billede arne_v Ekspert
08. maj 2006 - 20:14 #6
tilgaengelig for brugerne peger mod database fremfor flat file

flat file = almindelig tekst fil (XML er faktisk ikke saa velegnet, da det foerst er valid
naar slut tag er skrevet)

med fornuftige index saa kan database haandtere meget store tabeller rimeligt
fornuftigt

flere raekker koster altid lidt i performance men et par hundrede millioner
raekker kan virke fint
Avatar billede trumf Nybegynder
08. maj 2006 - 21:06 #7
OK, så langt så godt. Så skal det bare ned i databasen det hele...

Jeg står så nu med to muligheder, som jeg ser det.
1. jeg fortsætter med en logtabel som først beskrevet.
2. jeg kører med et versionsnummer som du foreslår.

Begge er tiltalende, men for mig er den største forskel at jeg med den ene gemmer i loggen for hver enkelt rettelse i hvert felt, mens den anden lægger op til at der rettes på en hel side. Jeg har normaliseret rimeligt godt, så det er ikke en stor bunke data der skal gemmes, selvom det evt. kun er et enkelt felt der er opdateret. Din metode løser også problemet med tekstfeltet, som der umiddelbart ikke er plads til at gemme i min metode.

Jeg kan dog ikke lige umiddelbart gennemskue om det er så smart at joine flere tabeller, når der både skal joines på ID og holdes styr på et versionsnummer. Hvordan klarer man sådan en ?
Avatar billede arne_v Ekspert
08. maj 2006 - 21:09 #8
... ORDER BY tabel1.version DESC,tabel2.version DESC,tabel3.version DESC LIMIT 1

eller

... WHERE tabel1.version = (SELECT MAX(version) FROM tabel1) AND
          tabel2.version = (SELECT MAX(version) FROM tabel2) AND
          tabel3.version = (SELECT MAX(version) FROM tabel3) ...

vil jeg tro
Avatar billede trumf Nybegynder
08. maj 2006 - 21:24 #9
Hvad er der i vejen med mit forslag ?
Avatar billede arne_v Ekspert
08. maj 2006 - 21:43 #10
ikke forstaaet
Avatar billede trumf Nybegynder
08. maj 2006 - 21:51 #11
Din mening om mit forslag med at logge alle ændringer enkeltvis i en seperat tabel, kontra gemme alt i samme tabel med versionsnummer.
Avatar billede trumf Nybegynder
08. maj 2006 - 21:51 #12
De to løsninger i 21:06:14
Avatar billede arne_v Ekspert
08. maj 2006 - 22:06 #13
jeg er lidt skeptisk overfor de aenkelte aendringer

jeg tror at det er lidt svaert at faa et samlet overblik over et antal rettelser

rul tilbage er faktisk ikke helt simpelt

men hvis plads er afgoerende og det mest er "show only" loggen skal bruges til
saa kan den da bruges

NB: hvis du bruger min model saa er en seperat tabel med 1:1 paa det store
tekst felt nok en god ide (for at undgaa at faa kopieret 20 KB tekst fordi
et tal rettes)
Avatar billede trumf Nybegynder
08. maj 2006 - 22:32 #14
Umiddelbart synes jeg godt om ideen med at der gemmes så snart der er blur på et felt. Dette kan også give et hint om hvordan brugerne bruger systemet, da der vil blive gemt en masse "mellemregninger" om man vil før brugeren er tilfreds med det samlede resultat. Jeg ved ikke om du kan følge mig...

Jeg har tænkt mig en logtabel der indeholder alt der kan identificere hvilket felt der er rettet i hvilken tabel, noget i stil med.
tabel - felt - feltID - felttype - enumfeltvaerdi - charfeltvaerdi - talfeltvaerdi - brugerid - dato

Derudover skal jeg under alle omstændigheder have noget feltvalidering og sideopbygning lavet automatisk, så det bliver nemt at udvide med flere data osv.

Din løsning forekommer mig dog som den nemmeste lige nu, men på lang sigt...
Avatar billede arne_v Ekspert
09. maj 2006 - 02:20 #15
en af felt og feltID er vel overflødige

og felttype må være givet udfra feltets type i databasen
Avatar billede trumf Nybegynder
09. maj 2006 - 20:35 #16
Mens jeg overvejer mit næste træk kan du jo give et svar
Avatar billede arne_v Ekspert
09. maj 2006 - 22:00 #17
ok
Avatar billede trumf Nybegynder
09. maj 2006 - 22:49 #18
Takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester