Avatar billede sunep Nybegynder
10. november 2004 - 13:36 Der er 7 kommentarer

Max duplicates

Er det muligt at lave i din database således at en kolonne i en tabel max må feks. 10 duplicates.

Så at du i din tabel har 10 records hvor "tlf" kolonnen indeholder "12345678" når der så prøves på at insætte en ny record hvor "tlf" indeholder "12345678" så slettes den ældste af de 10 records.

Min ide er at få lavet en database der ikke vokser sig kæmpe stor. At køre delete sqls, er ikke en mulighed, da det tager for lang tid. Tabellen er ret stor.
Avatar billede erikjacobsen Ekspert
10. november 2004 - 13:46 #1
Nej, det kan du ikke få mysql til at håndtere. Du skal ud i selv at
programmere dig ud af det.

Men det er da en besynderlig situtation - hvor kommer de data fra?
Avatar billede sunep Nybegynder
10. november 2004 - 13:58 #2
Det jeg henviser til er fiktive data.

Det skal bruges til følgende:
Vi går ud og spørger en masse kabelmodems (og jeg mener mange) og hvordan
de har det, signal styrke osv. og så smider vi det en database. Der bliver
smidt en ny record for hver modem i hver time, men vi skal kun bruge de sidste
100, records der er ældre er overflødige. Og jo størrer tabellen bliver, jo
langsommere bliver querys til tabellen. Og skal vi køre den delete query hver
dag vil den tage ca. 2.5 time. Vi kan dog programmere os ud af det i scriptet
der smider data ind, men det ville være smart hvis databasen selv kunne finde
ud af det :)
Avatar billede erikjacobsen Ekspert
10. november 2004 - 14:08 #3
Ja, det kan den så ikke.

Det vil tage tid at tælle om der er 100, og finde kriteriet for sletning.
Kan man så ikke slette alle fra før et givet tidspunkt. Med et index på det
felt bør det ikke tage så lang tid.
Avatar billede sunep Nybegynder
10. november 2004 - 14:34 #4
jo vi har jo et time felt med en unixtime, problemet er bare at der er 2400000 poster der skal slettes hver dag. Dog er der ikke index på dette felt.

Som det er nu er der ca. 30 querys pr sekund når den kører denne delete. Så kan du selv regne ud hvor  lang tid det tager. Det kan ikke gøres under en time. Og da der hver time skal indsættes ca. 10000 poster, fra et andet script, får vi et problem. Da insert querys fra dette script bliver locked, mens der køres delete. Det gør det hele meget langsomt.

Men løsningen kunne være at, insert scriptet sletter den ældste post, som er duplicate for det som den er ved at indsætte. Det vil gøre at scriptet tager ca 6 min mere at køre. det tager ca 10 min nu.
Avatar billede erikjacobsen Ekspert
10. november 2004 - 16:45 #5
Det er nok ikke det rigtige sted til den diskussion, men det kræver formentlig
en (lille?) omstrukturering af databasestrukturen. Der er umiddelbart ikke noget
vildt stort i systemet, som en passende struktur (måske opdeling i flere tabeller
og med de rigtige indexer) ikke ville kunne klare.

Men så skal man nok have fat i systemet, og kende mere til de konkrete operationer.
Avatar billede majkat Nybegynder
10. november 2004 - 23:15 #6
"der er 2400000 poster der skal slettes hver dag. Dog er der ikke index på dette felt."

?????

Så hver gang der skal søges i time-feltet skal MySQL gennemtrevle 2,5 mio poster... mens med et index på feltet skal der søges i 100...

Ka' du så se at få oprettet det index!
Avatar billede sunep Nybegynder
11. november 2004 - 00:26 #7
Du siger noget :) jeg lavede vist osse lige en fejl det er "kun" 240000 poster
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