Avatar billede gulbaek Nybegynder
08. august 2006 - 15:07 Der er 7 kommentarer og
1 løsning

Insert funktion som kun indsætter hvis de ikke allerede findes

Er igang med at lave en windows service som hvert 15. min henter et RSS feed og skal så gemme de 10 nyeste feed's

Den umiddelbare nemme løsning ville selvfølgelig bare være at jeg slettede de 10 feeds jeg allerede havde gemt på databasen og derefter lagde de nye ind.

Men syntes der er lidt for meget spild idet, et RSS feed ikke opdateres så ofte og der derfor kun vil være enkelte ændringer ved hver opdatering.

Mit spørgsmål er derfor, Kan jeg lave en sql sætning som ved en Insert checker om rss feeds'ne allerede findes på databasen, hvis de ikke gør det, skal de indsættes ellers skal den ikke gøre noget.

Og til sidst skal jeg have slette alle rss feeds der er ældre en de 10 nyeste, jeg har gemt en datetime hvor pubDate står.

Bruger MS SQL server hvis det skulle hjælpe.
Avatar billede arne_v Ekspert
08. august 2006 - 21:04 #1
et unikt index paa det felt som du bruger til at detecte em det er samme feed
vil give en fejl ced duplikat

det er bedre end forsoeg paa at lave sen SELECT og en INSERT med et hoejt
transaction isolation level

jeg mener ikke at SQLServer har noget ligesom MySQL REPLACE statement

det bedst performende er uden tvivl at holde en liste i memory over
indholdet i database og opdatere databasen udfra den
Avatar billede gulbaek Nybegynder
08. august 2006 - 22:10 #2
Er gået igang med en løsning hvor jeg kalder en MAX() på pubDate værdien hvor jeg så gerne skulle få pubdate på det nyeste feed, Så er det ellers meningen at jeg holder det op imod de feeds jeg lige har downloaded, så skulle jeg gerne kunne slette de feeds som allerede findes i databasen, og derefter lave en INSERT på de nye feeds.

Så skal jeg selvfølgelig lige have fundet udaf hvordan jeg får slette de feeds på databasen der er ældre en de 10 nyeste.
Avatar billede arne_v Ekspert
08. august 2006 - 22:18 #3
DELETE FROM tabel WHERE felt NOT IN (SELECT TOP 10 felt FROM tabel ORDER BY felt DESC)

vil jeg tro
Avatar billede arne_v Ekspert
08. august 2006 - 22:23 #4
hvorfor vil du ikke cache i app ?
Avatar billede gulbaek Nybegynder
08. august 2006 - 22:46 #5
Fordi jeg ikke tror jeg kan, hele problemstillingen er at jeg skal bruge de rss feeds på en hjemmeside, men da det tager for langtid at hente dem ned, selv hvis jeg slog cache funktionen til, så gav det stadig dårlig performance hvert 10-15 min. afhængig af hvor tit jeg skulle opdatere feeds.

Nu er jeg så igang med at lave en windows service der henter feeds'ne for mig og hjemmesiden skal så bare nøjes med at hente det fra databasen. Hvis du har et bedre forslag må du meget gerne fortælle det. Koder i C# og asp.net 2.0
Avatar billede arne_v Ekspert
10. august 2006 - 05:45 #6
jeg snakker ikke om at cache i din web app men om at cache i din opdaterings
service

når servicen starter op læser den MAX pubdate fra databasen

hvert kvarter kører service og:
  henter et antal feeds
  sammenligner deres pubdate med det i memory
  INSERT'er de feeds som er nyere
  DELETE'er gamle feeds fra DB (se SQL ovenfor)
  opdatere pubdate i memory med den nyeste fra de gemte feeds
Avatar billede gulbaek Nybegynder
10. august 2006 - 14:18 #7
Takker for hjælpen, har fået lavet en løsning der er nogenlunde som du har foreslået, smid et svar så du kan få lidt point :-)
Avatar billede arne_v Ekspert
10. august 2006 - 15:00 #8
:-)
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