24. december 2007 - 08:30Der er
19 kommentarer og 1 løsning
Automatisk databaselagring
Hej champs of evil programming!
Jeg vil gerne have at brugerne på min side, har mulighed for at lave tidsbaseret lagring i min mySQL-database. Dvs. en bruger logger ind, og siger: Nyheden (dataene) skal lægges i databasen kl 8:05 d. 26-11-07.
Jeg har læst lidt at der skal en SQL agent til? Belær mig vismænd! :)
Jeg tror desværre ikke at one.com leverer webhotels med SQL agent, hvilket sætter mig i et dilemma. Løsninger, scripts, og vise ord belønnes med 200 point (da det nu er juledag, og der sikkert at langt mellem svarerne, så gør dette forhåbentligt det mere attraktivt).
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Hvad med at blot lægge data i databasen med det samme? Udvid så nyheds-tabellen med en ekstra kolonne som indeholder hvornår nyheden skal være synlig fra. (kan eventuelt udvides med endnu et felt som angiver hvornår den skal være synlig til)
Se det sådan her. Det skal virke lige som en bank. Hvor renten er konstant (og ikke en gang og måneden) dvs. brugeren kan se renterne af sin løn konstant tælle ind... en øre, 2 øre, 3 øre, 4 øre.. osv.
Nej nej den er god nok ... så skal Agenten (jeg ved ikk om det virker sådan, men lad os kalde den "agenten") holde øje med om personen sætter flere penge ind, for at få en større rente. Dvs. i stedet for at den opdaterer databasen hvert minut med +1 øre.. så sætter den måske +2 øre ind på kontoen! :o.
Desværre så ved jeg ikke lige hvordan du ville gøre den slags i MySQL. Det kræver i hvert fald at du har mere end almindelig adgang til serveren med MySQL basen. Mere end hvad man normalt har på et webhotel...
Et problem i sammenhængen er at få noget kørt på et bestemt tidspunkt - uden at der er en bruger, som skal køre et script. Jeg ved ikke om MySQL har et sådant indbygget system (de nævnte SQL agenter), men en anden måde er at udføre den slags job som cronjobs. Hvis man ikke lige har adgang til at køtre cronjobs på serveren, kan man eventuelt benytte sig af eksterne tjenester som det cronjob.de levere.
Endnu et problem er at data under alle omstændigheder skal gemmes et eller andet sted indtil at de er parat til at blive lagt i databasen. En mulighed her kunne være at gemme dem som filer på disken, en anden kunne være at gemme dem i en temporær tabel (i databasen).
PS: Hvad er det lige ved nyheder der gør at det er så vigtigt at skelne skarbt med hvornår de er i databasen og hvornår at de er synlige?
Prøv at læse det overstående :) Det med banken. Det giver udfordring..
Fordi der kan være 1000 kunder i banken. Alle har hver x antal kr. på bankbogen, og alle skal ha' indbetalt +y i rente hvert minut. Den automatisk indsættelse skal gøres på en nem måde :/.
Husk at det også skal være muligt at lægge data i databasen, ved brugernes "request". :). De skal sige, kl 8.03, osv.. :) Håber man også kan det med et "cronjob".
Et cronjob er en facilitet som er indbygget i Linux (og Unix). I et Windowssystem ville det svare til en Windows-service. Det er et lille program som kan sættes til at køre på faste tidspunkter - f.eks. een gang i minuttet.
Du definere et cronjob og sætter det til at køre et bestemt PHP script som du har skrevet til formålet: Dette script opdaterer så renterne i banken. I stedet for at det er en bruger som aktivere PHP scriptet er det altså cronjobbet som gør det.
Det var den med renterne...
Så er der indsætningerne (og udtræk?). Dem ville jeg selv vælge at håndtere ved at lave en ekstra tabel med "indsætnings jobs" - hvor meget der skal indsættes, til hvilken konto og hvornår. Så ville jeg have endnu et cronjob (kunne dog være det samme som det forrige) som med jævne mellemrum kigger i job-tabellen og ser om der er et job som skal udføres (om tiden er kommet). Hvis der er det, så indsætter den pengene i banken og sletter jobbet fra jobtabellen.
Så kan du enten programmere det som en Windows service (at foretrække), eller du kan sætte det op med Window's Scheduler.
Det er muligt at der findes noget indbygget i MySQL, men så vil det sandsynligvis være i form af en service. Jeg kender ikke lige noget til den del og der vil du nok have en bedre chance ved at stille spørgsmålet i MySQL kategorien under databaser.
For sjov skyld kan du jo lige tjekke efter om du kan køre PHP scripts vha. Windows scheduler. Jeg gætter på at det faktisk mville være langt det simpleste.
Kan du ikke bare noter i din database hvornår 'brugeren' sidst var på, og når han kommer på begynder dit script at tælle hvornår han sidste var på, til han blev set igen. Så kan du jo sætte en værdi den skal have for hvert sek., min. eller time.
Så slipper du for at bruge alle mulige 'agenter' osv.
Brugeren skal desværre kunne se sin konto - og se at pengene tæller ind :/. Jeg regner med at lave en 5 minutters opdatering, igennem en ekstern applikation, lavet i VB sikkert :).
Synes godt om
Ny brugerNybegynder
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.