norsemanGrey Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 Heisann Vi har begynt å ta i bruk MySQL sammen med et HMI verktøy for å logge data fra div instrumenter osv. Jeg er relativt ny når det gjelder databaser og MySQL, men har etterhvert lert meg en del grunnleggende etterhvert som jeg har jobbet med det den siste tiden. Det er allikevel et par spørsmål jeg trenger hjelp til hvis noen er så hyggelige å tar seg tid til å svare på denne posten SPM 1) Verdiene jeg skal logge fra HMI programmet er for det meste real verdier (i størrelses orden +/- 0-10000) med høy presisjon. Jeg trenger allikevel ikke mer enn et par desimalers presisjon i loggen. Det skal hvert sekund logges mange 100 verdier så det er viktig at verdiene som logges tar så lite plass som mulig. Så spørsmålet mitt er hvilken data type jeg bør bruke for å oppnå dette? SPM 2) Etterhvert som loggen begynner å bli stor vil jeg ta en backup av loggen og starte på nytt igjen/slette databasen. Er det noen funksjon i MySQL som lar en gjøre dette automatisk? Dvs. at den f.eks. hver 7 dag tar en backup og sletter gammel data? SPM 3) Dataene som logges skal kunne hentes opp i et trend vindu i HMI programmet (som også kjøres som klienter over nettverk). Problemet er at denne funksjonen er veldig dårlig optimalisert for å hente ut data over lenger tid, slik at da det går forferdelig tregt. Den henter nemlig opp alle punktene som er lagret over den perioden man ønsker å se for istedenfor å hente ut et gjennomsnitt over flere tidsintervaller e.l. Derfor vil jeg prøve å lagre et gjennomsnitt for verdier over 1 minutt hvert minutt, og gjennomsnittet over 1 time hver time i to andre tabeller. (håper dette var forståelig ) Er det noen som kan hjelpe meg i riktig retning for å få til dette med SQL kode? Setter stor pris på alle svar uansett hvilket spørsmål Lenke til kommentar
kaffenils Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 Du bruker ikke relasjonsdatabaser til slike formål. Da går du fort på en gigantsmell. Til slik formål bruker du en tidsseriedatabase Lenke til kommentar
norsemanGrey Skrevet 13. oktober 2008 Forfatter Del Skrevet 13. oktober 2008 Du bruker ikke relasjonsdatabaser til slike formål. Da går du fort på en gigantsmell. Til slik formål bruker du en tidsseriedatabase Takk for tipset, jeg viste ikke at dette eksisterte en gang. Kan være noe å se på til fremtidige systemer, men desverre sitter jeg nok fast med MySQL i dette tilfellet. Hittil virker det ihvertfall til å fungere uten større problemer. Lenke til kommentar
kaffenils Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 Hittil virker det ihvertfall til å fungere uten større problemer. Hehe. Ikke for å være negativ, men "hittil" lukter veldig som "i vårt begrensede testmiljø". Men lykke til. Vi har prøvd, og feilet, med relasjonelle databaser til slikt. Lenke til kommentar
norsemanGrey Skrevet 13. oktober 2008 Forfatter Del Skrevet 13. oktober 2008 Hittil virker det ihvertfall til å fungere uten større problemer. Hehe. Ikke for å være negativ, men "hittil" lukter veldig som "i vårt begrensede testmiljø". Men lykke til. Vi har prøvd, og feilet, med relasjonelle databaser til slikt. Neida, applikasjonen blir testet i det akkurat miljøet den skal brukes i den og HMI applikasjonen vi bruker er ment til å logge data i slike databaser (om det er godt valg fra utviklerene av dette programmet kan jo diskuteres, men det fungerer ihvertfall). Så ihvertfall håper jeg det er noen som kan hjelpe meg med spørsmålene mine. Lenke til kommentar
kaffenils Skrevet 13. oktober 2008 Del Skrevet 13. oktober 2008 Neida, applikasjonen blir testet i det akkurat miljøet den skal brukes i den og HMI applikasjonen vi bruker er ment til å logge data i slike databaser (om det er godt valg fra utviklerene av dette programmet kan jo diskuteres, men det fungerer ihvertfall). Så ihvertfall håper jeg det er noen som kan hjelpe meg med spørsmålene mine. Problemet er at denne funksjonen er veldig dårlig optimalisert for å hente ut data over lenger tid, slik at da det går forferdelig tregt. Den henter nemlig opp alle punktene som er lagret over den perioden man ønsker å se for istedenfor å hente ut et gjennomsnitt over flere tidsintervaller e.l. Derfor vil jeg prøve å lagre et gjennomsnitt for verdier over 1 minutt hvert minutt, og gjennomsnittet over 1 time hver time i to andre tabeller. (håper dette var forståelig ) Er det noen som kan hjelpe meg i riktig retning for å få til dette med SQL kode? Selve loggingen hadde vi ikke problemer med. Der det derimot gikk på trynet var på de funksjonene du spør etter. Vi fikk for dårlig ytelse på rapporteringsfunksjonene. Prøvde å lagre minutt-for-minutt aggregeringer, men denne funksjonenen gikk til slutt ut over INSERT-ytelsen for loggingen. De fleste tidsseriedatabaser gjør slike ting du spør om veeeeeeldig mye bedre en du noen gang klarer å få til i MySql. Hva skjer når du vil ha inn masse andre aggregeringsfuksjoner, som min, max, stddev osv? Med mindre du har et stort ønske om å påføre deg selv søvnløse netter, angst og panikkanfall så foreslår jeg at dere begynner på scratch med dataloggeren deres. Lenke til kommentar
siDDis Skrevet 14. oktober 2008 Del Skrevet 14. oktober 2008 Er dette noko for Esper/NEsper? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå