Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Lagra datatabell i Cache?

Postades av 2004-06-17 13:37:10 - Ulf Elfving, i forum asp.net generellt, Tråden har 8 Kommentarer och lästs av 1305 personer

Har en fundering om det går att lagra en hel datatabell i Cache-objektet

Skall hämta data från en tabell som uppdateras var tionde sekund, och just nu är den tabellen hårt belastad, och min plan är:

Hämta ett DataSet/DataReader eller liknande, spara det i Cache-objektet
Om Cache inte förfallit, hämta tabelldatat från Cache och sedan köra SQLfrågor mot det cachade tabelldatat istf att gå mot tabellen.

Vilket objekt skall jag använda för att kunna lagra det i Cache samt sedemera "plocka fram" det och kunna köra SQLsatser mot det.

Gärna nåt litet kodexempel
TIA


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 14:35:37 - Fredrik Normén

DataReader är uteslutet eftersom den behöver en connection samt bara är en read-forward-only.

Ett DataSet skulle passa bättre då du har stöd för att göra frågor mot DataSet.


I ASP.Net så kan du anvädna Cache objektet:

Cache["MyData"] = myDataSet;

Du kan även ställa in hur länge cachen ska finnas etc. Så ett tips är att låta cachen dö ut efter en viss tid, tex efter 10 minuter.

Något sådant borde fungera (OBS! Har inte testat koden, men du ser hur du skulle kunna göra):

<code>

CacheItemRemovedCallback onRemove = null;

private DataSet GetDataSet()
{
DataSet myDataSet = new DataSet();


//Databas anrop och fyll DataSet.....
...

return myDataSet;
}


private void InitializeCache()
{
onRemove = new CacheItemRemovedCallback(this.RemovedCallback);

if (Cache["myDataSet"] == null)
this.AddToCache("myDataSet", this.GetDataSet());
}


//Denna metod anropas då din cache "dör"
public void RemovedCallback(String k, Object v, CacheItemRemovedReason r)
{
this.AddToCache("myDataSet", this.GetDataSet());
}

private void AddToCache(DataSet value)
{
Cache.Add("myDataSet", value, null, DateTime.Now.AddSeconds(600), TimeSpan.Zero, CacheItemPriority.High, onRemove);
}

public DataSet GetMyCachedDataSet()
{
this.InitializeCache();
return (DataSet)Cache["myDataSet"];
}

</code>

/Fredrik Normén NSQUARED2
http://normen.mine.nu/myblog


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 14:53:20 - Ulf Elfving

Tack skall kolla lite mer på det

En följdfråga: Jag inte listat ut är hur jag skall kunna manipulera datasetet, med tex SQLsatser för att hämta data ur det cachade datat.
Måste jag binda det till någon DataTable eller nåt för att sedan loppa igenom den för att hitta det värde jag litar efter?


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 15:37:32 - Fredrik Normén

Du kan använda dig av en DataView för att söka i DataSets. Här är kod som visar hur du kan filtera på kolumner:

<code>
DataSet ds = this.GetMyCachedDataSet();
DataTable myTable = this.GetMyCachedDataSet().Tables[0];
myTable.DefaultView.RowFilter = "CompanyName = 'MyComanoy'";
</code>

Du kan även använda Find eller FindRows, dessa methoder söker på de nyckar som du har specat att ditt dataset har.

/Fredrik Normén NSQUARED2
http://normen.mine.nu/myBog


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 15:51:05 - Ulf Elfving

Tackar!
Kikar vidare på detta.

Under tiden som jag "fnulat" på lösningen funderade jag på att använda en HashTable, eftersom det nu ser ut att vara Key/Value som jag skall plocka ur db.)

Har bara fått för mig att hanteringen av HashTable eventuellt är snabbare än att manipulera DataViews och DataSet, men har inget belägg för det.

Prestandamässigt: Är det bättre att köra HashTable eller DataSet i denna typ av Cachade data?


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 16:39:41 - Fredrik Normén

Absolut, hashtable är snabbare. För att fylla en Hashtable utifrån en databas, använd då DataReader och inte DataSet.

/Fredrik Normén NSQUARED2
http://normen.mine.nu/myblog


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 17:00:09 - Ulf Elfving

Yepp!
Man tackar!
Lutar åt HashTable för lösningen just nu, men håller pejl på dina övriga tips för framtiden.


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-17 21:19:47 - Ulf Elfving

Så här löste jag det (kanske nån annan kan ha nytta av det)

Fyller HashTable
Plockar bara ut de fält som jag behöver (två fält, primärnyckel och värdefältet)
<code>
Private Sub SetTableTotalData()

Dim Conn As New SqlConnection(Current.Application("strCon"))
Dim Cmd As New SqlCommand("SELECT dbid, statvalue FROM RTS_DATA_VIEWS", Conn)

Conn.Open()

Dim dataReader As SqlDataReader = Cmd.ExecuteReader()

Cmd.Dispose()

Dim hTable As New Hashtable
Do While dataReader.Read
hTable.Add(dataReader(0), dataReader(1))
Loop

Current.Cache.Insert("TableTotal", hTable, Nothing, DateTime.Now.AddSeconds(AppSettings("strDbChacheTime")), TimeSpan.Zero)

Conn.Close()

End Sub
</code>

Hämta data från HashTable
Först kollas Cachen om den fortfarande gäller, om inte så fylls cachen igen
Funktionen GetValueFromHashTable anropas med det primärnyckel värde jag vill åt
<code>
Public Function GetBreddMaxTimeWait() As Integer

Return GetValueFromHashTable(BREDD_MAXTIMEWAIT)

End Function
</code>

Funktion för att hämta data från HashTable
<code>
Private Function GetValueFromHashTable(ByVal DbId As Integer) As Integer
Dim retval As String

If Current.Cache("TableTotal") Is Nothing Then
SetTableTotalData()
End If

Dim hTable As Hashtable = Current.Cache("TableTotal")
retval = hTable(DbId).ToString
Return Convert.ToInt32(retval)
End Function
</code>


Svara

Sv: Lagra datatabell i Cache?

Postades av 2004-06-19 13:30:52 - Ola Lindfeldt

Snyggt och enkelt :)

Jag har använt mig av Dataset i cachen, funkade bra det med och rätt snabbt ändå.
Jag hade nämligen behov av RowFilter samt flera kolumner..

Ola


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
1 099
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies