webForumDet fria alternativet

arbeta mot databas, funktion tar en timme??

ASP

18 svar · 865 visningar · startad av eddy1

Medlem sedan aug. 2001969 inlägg
Frågan#1

Hej

undrar lite nu?
om jag läser in ett visst antal poster från en databas. Lopar igenom dessa och för varje post kör jag en funktion som tar minst 5 sek att utföra. Säg nu att det är 100 poster, 500 sek, blir ju nästan 10 minuter..

Är databasen helt låst då under 10 min eller kommer andra användare åt den..

Finns det något annat sätt att göra detta. hade tänkt att köra det på nätterna men jag kan ju ändå inte låsa upp hela databasen för andra användare??

databasen är MS SQL!

Mvh

Medlem sedan apr. 20022 743 inlägg
#2

Går inte riktigt att svara på frågan utan att ha mer informationoch kanske lit kodmen spontant:

MS SQL klarar bra mycket mer än 1 ansluing i taget ;). Tänk även på att man inte är ansluten till databasen hela tiden man är på en hemsida (om den inte är riktigt dåligt kodad förstårs) utan bara en bråkdel just då man hämtar eller skriver nått till den.

Är du ändå orolig så kan du hämta ut alla poster du ska använda till en array som du sedan kan loopia igenom och på så sätt ansluter du bara till databasen en gång i nån sekund. Aldrig använt MS SQL men i MySQL heter det GetRows.

Sen i allmänhet så hoppas jag att du stänger databasen ordentigt efter hämtande innan du börjar köra funktioner och liknande så den inte är öppen i onödan.

Medlem sedan dec. 20014 239 inlägg
#3

Att hämta den lilla mängd data tar knappt någon tid alls. Och MS SQL kan som Poffe skriver hantera fler anslutningar samtidigt. Men i princip kodar du så här:

1. Öppnar mot Databasen.
2. Hämtar den data du ska.
3. Stänger kopplingen mot databasen.
4. Presenterar den data du hämtade.

Vad är det för funktion du ska köra? Ligger den i databasen eller utanför? Du får visa mer kod för att få bättre hjälp.

Medlem sedan aug. 2001969 inlägg
#4

var just det jag tänkte på med att stänga..

hade ju tänkt nåt sånt här...

do until rs.eof

con.execute("update set ns="& funktionSomReturneraVärde() &" where id="& rs("id") &")

loop
rs.close

nu är det ju bara det att funktion tar 5 sek att köra och det kanke blir 100 till 1000 poster..

finns det något sätt om jag vill ha en fördröjning i min funktion t.ex 10 sek??

Medlem sedan juni 20019 519 inlägg
#5

förstå inte varför du vill "söla" ner din funktion ännu mer... du kan typ ta for i = 0 to 100000 så blir det en "fördröjning"... men finns inget "wait" liknande i ASP.

Medlem sedan dec. 20014 239 inlägg
#6

Men vänta lite nu...

Din funktion kommer ju att köras först innan din update sats körs. Fördröjningen blir ju så lång som din funktion gör den. Förstår inte vad du vill åstadkomma? Varför vill du ha en fördröjning?

Kan du "måla" upp scenariot om varför du vill ha en fördröjning?

Medlem sedan aug. 2001969 inlägg
#7

Jag loggar besökarna på min sida.. också tänkte jag att på natten ska det köras ett skript som gör en nslookup på varje besök som varit under dagen...

scriptet för nslookup gör frågan mot ripe men man får väll inte ställa flera frågor för tätt där, så jag vill ha en fördröjning..

sen fanns det en annan lösning och det var att använda en komponent, den komponenten då var en demo och därfär ger den en fördröjning på 5 sek för varje fråga: därav tiden det kommer ta att öra igenom alla poster..
Lite jobbigt och då man måste få dom på webhotellet att installera denna komponent..

Medlem sedan dec. 20014 239 inlägg
#8

Då skulla jag nog kolla om jag redan slagit upp adressen tidigare och hämta värdet därifrån innan jag slår upp den igen hos ripe. Varför inte köra det direkt efter inloggning? Då sprider du ut det över tiden. Eller loggar alla in samtidigt?

Har du många slagningar spelar nog inte en 5sekunder fördröjning så stor roll då antalet slagningar förmodligen sätter stopp.

Medlem sedan aug. 2001969 inlägg
#9

jag vill ju inte att det ska skapa någon fördröjning när besökaren kommer till sidan. det är ingen inloggning på sidan utan bara besöksregistrering..

kan du beskriva lite mer hur jag ska gå tilllväga??

om man skulle göra som jag tänkt. ska koden vara som jag har gjort den eller ska jag bara läsa en post köra rs.close och sedan UPDATE och sedan börja om igen med en fråga som tar ut en post??

Medlem sedan dec. 20014 239 inlägg
#10

Hmmm försöker du inte uppfinna hjulet igen nu?

Har du inte möjlighet att få loggarna från ditt webhotell eller använda tex http://webstats.motigo.com
Att logga varje besök genom kod igen känns lite onödigt eftersom den informationen förmodligen loggas av webservern i sig.

Medlem sedan aug. 2001969 inlägg
#11

ähh jag har ju redan gjort det mesta nu. Nu vill jag bara lägga till denna funktionen också.. Alltså så jag har leverantören och landet i loggen...

men till frågan igen då..
vilken kod är bäst eller ingen alls??

do until rs.eof
con.execute("update set ns="& funktionSomReturneraVärde() &" where id="& rs("id") &")
loop
rs.close

ovan kod då. Är databasen helt låst tills det jag kör rs.close eller kan det fortfarande skrivas till den om det t.ex kommer en beesökare.. Kanske måste ändra script timeout när jag kör detta??

eller ska man köra:

SQL......
set rs = execute.....
id= rs("id")
rs.close
con.execute("update set ns="& funktionSomReturneraVärde() &" where id="& id &")

och sen loop runt ovanstående, eller inget av ovanstående förslag.. öppen för andra ideer...

Medlem sedan juli 20003 825 inlägg
#12

Jag vet inte om det är aktuellt för dig, men ett alternativ som kanske passar är att lägga funktionen i global.asa.

SUB Session_OnEnd
-- session("databasePath") = ""
-- Application.Lock
-- application("ActiveUsers") = application("ActiveUsers") - 1
-- Application.UnLock
END SUB

Då har du fortfarande all data från användaren, men samtidigt sölar det inte ner "närvarokänslan" för respektive användare. Dom lämnar hemsidan, stänger fönstret eller vad det nu är.

Som sagt, jag vet inte om det skulle fungera i just ditt fall.

Medlem sedan juni 20014 290 inlägg
#13

Först varför vill du använda ripe's dns servrar, din ISP's servrar fungerar lika bra?

I PHP finns ip-namnet och ip-nummret i variabler som skapas när http anropet görs, finns det inget liknande i ASP som du kan använda och spara direkt i databasen vid anropet?

Medlem sedan okt. 2004502 inlägg
#14

Du beskriver ju inte vad du gör speciellt ingående men jag hade skapat en tabell där jag lagrade ipadresserna och slog upp dem; på så sätt behöver du inte slå upp samma adress flera gånger.

Medlem sedan aug. 2001969 inlägg
#15

vad jag gör?

Jo jag loggar besökaren när dom kommer till hemsidan, då sparar jag info som, tid,språk, platform m.m. samt ip...

på natten vill jag schemalägga ett script som kollar alla poster som varit under dagen där fältet dns är tomt, är det så så ska det köras en fråga mot ripe för att ta reda på leverantören och landet och spara dessa under dessa fält i databasen..

jag vill bara inte att databasen blir helt låst när detta script körs om detta nu skulle ta en timme att köra?? måste ju ändå kunna registrera besök i databsen fast scriptet körs???

jag har inte möjlighet att installera komponent på webhotellet så då var det ju bra med ett script som körde mot ripe..

Medlem sedan apr. 20022 743 inlägg
#16

Som sagt, MS SQL klarar mer än en (1) samtidig anslutning så det är inga problem.

Precis som här på wF är det ju inte bara en som kan använda databasen per gång, då skulle man hamna i kö väldigt ofta, ja varje gång som nån laddar en tråd eller sparar ett inlägg eller navigerar bland de olika forumen.

Medlem sedan mars 20041 505 inlägg
#17

Men jag vill påpeka att man är helt fel ute om man skriver ASP-sidor som tar 1 timme att köra igenom.
Som sagt, varför inte utföra denna operation för varje användare direkt när sessionen tar slut?

Medlem sedan aug. 2001969 inlägg
#18

jag har använt mig av session_Onend för att skriva in tid i databsen då besökaren lämnar för att räkna ut besöks tid men tycker inte det verka vara så pålitligt...

´men jag kanske har fel??

sen har ju problemet att man inte kunde ställa frågorna för tätt mot ripe, utan man skulle göra det mot en viss port tror jag det var. Har nte kunnat hittat något om hur man gör det???

Medlem sedan okt. 2004502 inlägg
#19

Kör du en whois mot ripe eller är det bara en rdns-fråga?
rdns kan du lika gärna ställa till webbhotells namnservrar, det bör gå snabbare

Använd dig av fördelarna med relationsdatabaser. Spara ip i en egen tabell och slå upp från denna så behöver du inte slå upp varje ip mer än en gång.

272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)