Lite kryptisk rubrik kanske, men det var svårt att hitta nått passande. Har precis sjösatt ett nästan exakt liknande projekt Jag måsterkänna att jag inte riktigt hänger med var text-filerna kommer in i bilden i ditt fall. Vi har en "dubbel-lösning" Ok, då är jag med =) Skulle tro att du lätt klarar dig med textfiler som uppdateras, iom att du använder cachen och dom bara uppdateras när filen skrivs. Men då läser alltså dina ca 600 samtidiga användare från textfilerna om jag uppfattat det hela rätt? Nej det är det som är det fina med Cacheobjeketet Jajjemänn, nu fick jag absolut svar på det jag ville veta. Hehe! (Är iofs ingen ursprunglig Pitbo, men känner mig mer hemma här nu efter ett antal år "nere vid Pite-älva") Blev nyfiken..... Hur har du löst kommunikationen mellan ditt mätobjekt och servern? GPRS? .. Jo, om/när allt skall köras skarpt är tanken GPRS, alternativt andra källor som i sin tur får lägesinformationen genom GSM/GPRS."Realtidsdata" till tunna klienter (webbläsare)...
Vad jag vill uppnå är ungefär följande:
Har byggt en serverkomponent som var 5:e sekund läser in realtidsdata (GPS) från COM/USB port samt kombinerar lägesinformationen med några andra uppgifter (som ID mm). Så långt inga problem.
Frågan är då hur jag skall lagra denna information på ett sånt snabbt och resurssnålt sätt (både för servern och klienten) så att informationen blir tillgänglig att använda från en webbsida (asp.net i c#).
Det rör inte om stora mängder data alls men eftersom uppdateringen sker (minst) var 5:e sekund och skall vara tillgänglig för många klienter som läser informationen samtidigt bör det inte vara så tungrott.
Som jag gjort nu skrivs informationen till en XML-fil på servern. Webbapplikationen läser således i sin tur mot denna XML-fil var 5:e sekund för att få den senaste uppdaterade informationen.
Frågan är då vad som egentligen är smidigast (snabbast)?
Alternativet är att helt enkelt använda en text-fil för ändamålet, TextReader i C# är ju rätt snabbt och resurssnålt (eller?).
Har även tillgång att göra en databaslösning med Oracle. Detta kanske inte är så resurssnålt och snabbt i alla lägen men det finns anda fördelar med en databaslösning.
Så för att summera det hela en aning.
Vill alltså att min serverkomponent skall "strömma" ut informationen och att alla som besöker en webbsida skall komma åt den kontinuerligt uppdaterade informationen med, säg, 5 sekundersintervall.
Tacksam för synpunkter och förslag!Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Använd Cache objektet för att lagra det du vill spara för att spara resurser
Kollla mitt sista inlägg i [Lagra datatabell i Cache?] (Iofs VB.NET och SQLServer, men det kanske inte är så lurigt att översätta)
Angående textfiler så använder jag vanliga textfiler som jag sätter in i cachen med FileDependency, vilket gör att cachen uppdateras när filen ändras (Lite om det hade jag i [Sätta/hantera Cacheobjekt i klassfil?] ) Men koden för SetCacheData hade jag utelämnat där, så jag lägger till den här:
<code>
Private Sub SetCacheData(ByVal FileName As String, ByVal ChacheName As String)
Dim strText As String
Dim sr As StreamReader
Dim arrSchemaValues As Array
Dim i As Integer
' Kontrollera att filen finns
If File.Exists(FileName) Then
'Maxgräns för antal loopningar 20 * 250 ms = 5 sekunder
For i = 0 To 20
Try
' öppna filen
sr = File.OpenText(FileName)
' läs in hela innehållet i strText
strText = sr.ReadToEnd()
' stäng StreamReader
sr.Close()
' Ersätt " och vbcrlf, det som återstår är data som är tabbseparerad
strText = strText.Replace("""", "")
strText = strText.Replace(vbCrLf, "")
' Lägg in värdena i array
arrSchemaValues = Split(strText, vbTab)
' Lägg till array i Cache och bind den till filen
Current.Cache.Insert(ChacheName, arrSchemaValues, New CacheDependency(FileName))
' om vi kommer hit har läsning fungerat och vi bryter oss ur loopen
Exit For
Catch e As Exception
'Ett fel uppstod så vi låter sidan sova 0,25 sekunder för att sedan anropa samma sub
System.Threading.Thread.Sleep(250)
'Call SetCacheData(FileName, ChacheName)
End Try
Next
End If
End Sub
</code>
Anledningen till att jag har parametern ChacheName i funktionsanropet är att jag "labbar" med 5 stycken filer, och sätter då olika Cache-objekt beroende på filens namn.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Det är alltså i databasen som den uppdaterade information hela tiden först lagras i?
Men tackar så mycket för förslaget, skall helt klart kolla upp det hela.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Jag hämtar data från en databas (Oracale i produktion/SQLServer i testmiljön) och från textfiler.
Textfilerna skrivs ner till en undermapp på webservern av ett externt program som hämtar data ur en annan Oracledatabas.
Textfilerna uppdateras var 30 minut, och datat i databasen var 5 sekund.
Data ur databasen hämtar jag bara var tionde sekund för närvarande eftersom det räcker.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Då lutar det nog mer åt en databaslösning (Oracle) eftersom det kanske kan vara uppåt 50-100 användare som skall komma åt realtidsinformationen samtidigt var 5:e sekund under, säg, 10 minuter i snitt (grovt uppskattat).
Oracle är väl liksom byggt att klara anstormningar av det här slaget (?).
Fast å andra sidan är det inte så värst stor mängd (antal poster) som skall hämtas varje gång.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Men frågan är ju lite prestandamässigt vad som tar mest tid. Att skriva ner data till disk (fil) och hämta data därifrån, eller att hämta datat direkt från databasen. Skulle nog tro att direkt kontakt med databasen är att föredra för prestandan i slutändan ändå.
Jag kommer att ha ca 600 samtidiga användare med mitt system, och det märks knappt i databasen att jag hämtar data var femte sekund.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Det är liksom där skon klämmer känns det som. Vad är bäst, låta flera hundra användare läsa från en text-fil på servern eller en Oracletabell var 5;e sekund?
I mitt fall rör det sig som sagt om ca 100 (kan iofs bli 600 också) användare som under en relativt lång stund skall titta på när "datat" ändrar sig.Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Jag cachar hela datatabellen (nja, de kolumner som jag behöver) i mitt CacheObjekt
Det mot databasen har jag tidbegränsat till 10 sekunders "levnadstid"
Det innebär att den första request som kommer till sidan så läser jag från db, lagrar allt jag behöver i Cache
Nästa request som kommer inom 10 sekunder läser från cache eftersom den ännu inte "dött"
Det gör att om jag har 1 miljon hits på sidan / 10 sekunders intervall, görs bara en läsning från databasen.
Vad gäller filer så "dör" cachen där när filen får ett nytt timestamp, filen skapas på nytt eller ändras.
Det gör precis samma sak som mot db, inga mer läsningar mot filen så länge den inte är förändrad.
Hoppas jag förklarat så att du förstårSv: "Realtidsdata" till tunna klienter (webbläsare)...
Ska läsa på lite om cache objekt.
Tackar och bockar för hjälpen.
Är ursprungligen från Luleå så jag vet att en pitbo alltid är att lite på... ;)Sv: "Realtidsdata" till tunna klienter (webbläsare)...
Är det nåt du undrar över så bara hojta =)Sv: "Realtidsdata" till tunna klienter (webbläsare)...
mvh
/JockeSv: "Realtidsdata" till tunna klienter (webbläsare)...
Under utveckling används "fejkade" rutter.
Mycket jobb och en del frågetecken återstår...speciellt eftersom systemet skall kunna hantera flera (mät)objekt såklart...
Om du (jocke) själv har erfarenhet utav detta får du gärna dela med dig utav dessa ;)