|
| Bedste bud på at opdatere en webserver med~ Fra : Christian |
Dato : 27-03-03 16:42 |
|
Jeg kunne godt tænke mig at høre bud på hvorledes man bør/kan
opdatere en database i følgende situation:
Situationen er den at der på webserveren (ikke hosted lokalt)
ligger en database (testDB). I denne ligger der en produkttabel
med (produkt_Id, Produktnavn, Beskrivelse, pris)
Opdateringen af denne tabel, skal ske på baggrund af en tekstfil
(C4)
produkter.txt (10;Opel Vectra;Bil;100000)
Spørgsmålet er så hvorledes laves den letteste og mest praktiske
opdatering af produkttabellen (indeholder ca. 4000 varer) ?
Foreslås MySQL eller en Access DB ?
Kan man på en smart måde lave en kørsel der gennemløber
tekstfilen linie for linie og opdaterer denne i testDB'en eller
er det for voldsomt med 4000 opdateringer via en ASPside ?
Desuden skal en record slettes i testDB'en, hvis et produkt_Id
ikke længere forekommer i produkter.txt (altså at en vare er
blevet slettet, og dermed ikke skal forekomme på webserveren
længere)
På forhånd tak !
--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
| |
SUM (27-03-2003)
| Kommentar Fra : SUM |
Dato : 27-03-03 21:35 |
|
"Christian" <bateman@surfmail.dk> skrev i en meddelelse
news:b5v63g$qob$1@sunsite.dk...
<snip>
Er der andre felter i basen testDB end dem du har i tekstfilen?
Det nemmeste er nok at hente basen hjem lokalt og opdatere den med et vb
script, hvorefter du uploader den igen.
Jeg opdaterer selv en base med 18.000 poster ugentligt, og det tager på den
måde ca. 5 min.
Samtidig betyder det, at basen ikke er"uarbejdsdygtigt" på nettet mens du
opdaterer.
Mvh Steen
| |
Jesper Nielsen (28-03-2003)
| Kommentar Fra : Jesper Nielsen |
Dato : 28-03-03 08:23 |
|
> Det nemmeste er nok at hente basen hjem lokalt og opdatere den med et vb
> script, hvorefter du uploader den igen.
> Jeg opdaterer selv en base med 18.000 poster ugentligt, og det tager på
den
> måde ca. 5 min.
Jeg er helt enig - det ville være den bedste metode.
Jeg gennemløber hver nat en logfil fra min bannerserver på omkring 200 MB,
indsætter data i en midlertidig MSSQL tabel, gennemløber de midlertidige
data og laver beregninger. Det tager ca. 15 minutter.
Scriptet ser således ud. Måske spørgeren kan bruge det til noget?
' Print Start Time
Workdate = Now()
StartTime = Now()
WScript.Echo(" NielsenIT AdServer LogScanner")
WScript.Echo(" Scan start: " & StartTime)
' Create DB Connection
Set Conn = CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=SQLOLEDB.1; SERVER=127.0.0.1; DATABASE=SSCE_AdReports;
UID=sa; PWD=**********; NETWORK=DBMSSOCN;"
' Truncate tempdata table
SQL = "TRUNCATE TABLE TempData;"
Conn.Execute(SQL)
' Determine LogDir and LogFile
LogDir = "c:\winnt\system32\logfiles\w3svc11\"
aDate = DateAdd("d",-1,Workdate)
MyYear = Right(Year(aDate),2)
MyMonth = Month(aDate)
MyDay = Day(aDate)
If Len(MyMonth) < 2 Then MyMonth = "0" & MyMonth
If Len(MyDay) < 2 Then MyDay = "0" & MyDay
LogFile = "ex" & MyYear & MyMonth & MyDay & ".log"
' Open Logfile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set f1 = FSO.OpenTextFile(LogDir & LogFile,1,False)
I = 0
' Read and parse logfile
Do While Not f1.AtEndOfStream 'And I < 5001
strParse = f1.ReadLine
If InStr(1,strParse,"Missing_URL") Then
ElseIf InStr(1,strParse,"adredir.asp") Then
On Error Resume Next
myString = ""
myString = Mid(strParse, InStr(1, strParse, "ciid=")+5, 16)
myString = Left(myString, InStr(1, myString, "&")-1)
If Err.number = 0 Then
SQL = "INSERT INTO TempData(CIID,Action) VALUES(" & myString & ",1);"
Conn.Execute(SQL)
End If
ElseIf InStr(1,strParse,"/siteserver-") Then
On Error Resume Next
myString = ""
myString = Mid(strParse, InStr(1, strParse, "ASIMPR=")+7, 16)
myString = Left(myString, InStr(1, myString, "&")-1)
If Err.number = 0 Then
SQL = "INSERT INTO TempData(CIID,Action) VALUES(" & myString & ",0);"
Conn.Execute(SQL)
End If
End If
I = I + 1
Loop
' Insert records to AdStats
aDate = DateAdd("d",-1,Workdate)
MyYear = Year(aDate)
MyMonth = Month(aDate)
MyDay = Day(aDate)
If Len(MyMonth) < 2 Then MyMonth = "0" & MyMonth
If Len(MyDay) < 2 Then MyDay = "0" & MyDay
MyDate = MyYear & "-" & MyMonth & "-" & MyDay
SQL = "SELECT * FROM Creatives;"
Set Qry = Conn.Execute(SQL)
If Qry.Eof = False Then
Do While Qry.Eof = False
SQL = "INSERT INTO AdStats(CreativeId,DateReport,AdViews,AdClicks) " & _
"VALUES(" & Qry("ID") & ",'" & MyDate & "',0,0);"
Conn.Execute(SQL)
Qry.MoveNext
Loop
End If
SQL = "SELECT * FROM AdStats WHERE DateReport = '" & MyDate & "';"
Set Qry = Conn.Execute(SQL)
If Qry.Eof = False Then
Do While Qry.Eof = False
' Count and Update Views
SQL = "SELECT COUNT(*) AS Cnt FROM TempData WHERE CIID = " &
Qry("CreativeId") & " AND Action = 0;"
Set aQry = Conn.Execute(SQL)
SQL = "UPDATE AdStats SET AdViews = " & aQry(0) & " WHERE CreativeId = "
& Qry("CreativeID") & " AND DateReport = '" & MyDate & "';"
Conn.Execute(SQL)
' Count and Update Clicks
SQL = "SELECT COUNT(*) AS Cnt FROM TempData WHERE CIID = " &
Qry("CreativeId") & " AND Action = 1;"
Set aQry = Conn.Execute(SQL)
SQL = "UPDATE AdStats SET AdClicks = " & CLng(aQry(0)) * 3 & " WHERE
CreativeId = " & Qry("CreativeID") & " AND DateReport = '" & MyDate & "';"
Conn.Execute(SQL)
Qry.MoveNext
Loop
End If
' Truncate tempdata table
SQL = "TRUNCATE TABLE TempData;"
Conn.Execute(SQL)
Conn.Close
Set Conn = Nothing
EndTime = Now()
WScript.Echo(" Scan end : " & EndTime)
WScript.Echo(" Scan time : " & DateDiff("s",StartTime,EndTime) & " sec.")
WScript.Echo(" Done!")
| |
Jesper Stocholm (28-03-2003)
| Kommentar Fra : Jesper Stocholm |
Dato : 28-03-03 11:21 |
|
Jesper Nielsen wrote :
>> Det nemmeste er nok at hente basen hjem lokalt og opdatere den med et
>> vb script, hvorefter du uploader den igen.
>> Jeg opdaterer selv en base med 18.000 poster ugentligt, og det tager
>> på den måde ca. 5 min.
>
> Jeg er helt enig - det ville være den bedste metode.
> Jeg gennemløber hver nat en logfil fra min bannerserver på omkring 200
> MB, indsætter data i en midlertidig MSSQL tabel,
hvis spørgeren har adgang til MSSQL, så kan man med fordel bruge nogle af
de indbyggede import-værktøjer til at importere data, bearbejde dem og
returnere givne værdier. Jeg bruger selv dette, hvor en MSSQL2k (i
princippet) hver nat modtager en brugerdatafil fra en ekstern kilde,
importerer den og bearbejder den i forhold til de eksisterende data. Jeg
kunne forestille mig, at anvendelse af de indbyggede værktøjer vil betyde
forbedret performance i forhold til at lave et vb-script til det. Min
løsning kræver dog, at man har adgang til at bruge Enterprise Manager.
--
Jesper Stocholm - http://stocholm.dk
www.asp-faq.dk: FAQ for dk.edb.internet.webdesign.serverside.asp
www.usenet.dk/netikette/citatteknik.html: Skriv under det du svarer på
Svar venligt til gruppen og ikke til mig privat !
| |
|
|