AW: [Ado.net] SQL Tuning - Werte in einem Feld zusammenfassen

Pessner, Andreas ado.net@glengamoi.com
Thu, 24 Nov 2005 11:02:09 +0100


Grins  genau vor derselben Problematik stand ich vor einen Jahr auch und =
stehe es eigentlich bei jeder neuen Anwendung / Erweiterung erneut.

Ich habe mich jetzt auf ein intensives Caching eingeschossen. Das geht =
als Antwort sehr gut - und ist extrem schnell. Bedeutet aber im anderen =
Fall auch eine saubere Objektstruktur und natürlich auch den =
erhöhten Speicherbedarf des WebServers / oder natürlich auch Clients =
(bei Windows Apps).

Bedeutet - in Deinem Fall bilde ich die SQL Datenstruktur als =
Objektstruktur nach - wobei es eigentlich natürlich anders rum ist =
;-). Die Objekte arbeiten mit HashTables, Arrays usw. - je nachdem was =
gerade sinnvoller ist.

Dabei zieht jedes Objekt je nach Notwendigkeit die Daten aus der DB und =
legt sie im Application Cache ab (aber Achtung bei großen =
Datenmengen). Dabei liegt die Logik, welche Daten gezogen werden sollen =
im Objekt selbst (bedeutet ob alle geholt werden sollen, oder ob nur ein =
Teil benötigt wird). Somit werden die Caches dabei auch nicht immer =
vollständig gefüllt, sondern können auch nach Anfrage erweitert =
werden.

Warum das ganze?
Es ergibt sich eine sehr übersichtliche Objektstruktur. Um Daten aus =
der DB zu holen ist dann nicht mehr direkt nötig - da dafür ja das =
Objekt zuständig ist. 

Das ganze ist hervorragend erweiterbar, weiterhin arbeitest Du ja dann =
nicht mehr mit UnTypisierten DataTables sondern hast immer typsichere =
Objekte! Damit kann man dann auch wunderbar selbst gebaute User Controls =
befüllen! (Details Ansichten, Edit Controls, Listen usw.)

Weiterhin habe die Objekte auch die notwendigen Update, Insert, Delete =
Routinen. Wenn ich ein Datensatz ändere mache ich dies dabei direkt in =
der DB und im Cache.

Aber wie gesagt - das ist nur eine Art der Implementierung - und sicher =
auch nicht der Weisheit letzter Schluss.

So und für Deinen Fall mach ich dann folgendes!

Objekt: Item
Objekt: ItemGroup
Objekt: ItemGroupItems

Item Objekt
Properties:
- int ItemID
Methode:
- getItemGroups()


ItemGroup Objekt
Properties:
- int GroupID


ItemGroupItems Objekt
Properties:
- Collection Objekt - welches 2 int Werte halt
Methode:
- getItems(ItemGroup Element)
- getGroups(Item Element) 


So kannst Du jetzt über Item.getItemGroups() die Methode =
ItemGroupItems.getGroups(this) aufrufen - und bekommst dann eine Liste =
mit den Daten geliefert (je nach gewünschten Format versteht sich!

So - das sollte erstmal genug sein - es soll ja auch nur ein Denkansatz =
sein - und keine fertige Lösung - für die man dann eh eine konkrete =
Aufgabe braucht.

-----Ursprüngliche Nachricht-----
Von: ado.net-admin@glengamoi.com [mailto:ado.net-admin@glengamoi.com] Im =
Auftrag von Patrik Bitzer
Gesendet: Donnerstag, 24. November 2005 09:18
An: ado.net@glengamoi.com
Betreff: AW: [Ado.net] SQL Tuning - Werte in einem Feld zusammenfassen

Hallo Andreas

Vielen Dank für Deine Ausführlich Antwort!

Es geht mir um Performance-Gewinn. Meine Datenstruktur scheint zu
kompliziert aufgebaut zu sein, die Abfragen dauern zu lange. Die =
Abfragen
dauern aber nicht wegen fehlenden Indizes oder so zu lange, sondern weil =
die
Datenstruktur in gewissen Fällen rekursiv abgefragt wird.

Die Datenstruktur lässt sich gut mit der Struktur von Dateien in =
Ordnern
vergleichen. Ich habe also eine beliebige Ordnerstruktur. (Meine Groups, =
die
Childs- sowie Parents haben können). Ich habe dann also Items, die in =
dieser
Ordnerstruktur abgelegt sind. Die Items haben u.A. eine Sprachzuweisung.
Diese Sprachzuweisung ist wiederum eine Relation zu einer
(Stammdaten)-Table. Der einzige wichtige Unterschied zu Dateinen in =
Ordnern:
ein Item kann mehreren Ordnern zugewiesen sein!

Typische Abfragen schauen dann so aus: Von einem Ordner aus hierarchisch
nach unten, will ich herausfinden welche Sprachen vorkommen. Näher =
erklärt:
In den Ordnern und subordner können Sich Items befinden, die ja eine =
Sprache
als Attribut haben. Ich will also sagen können: In der Ordnerstruktur =
gibt's
Items von der Sprache X, Y und Z. Vlt. Als Vergleich: Wäre so wie wenn =
man
Fragen würde: welche Dateitypen (Extension) kommen im Ordner
windows/system32 vor und die Antwort wäre dann: "dll, exe, bat ....."

So würde ich mir mal erhoffen die Ordnerstruktur nicht rekursich =
abgrasen zu
müssen, wenn die Items selbst schon eine Liste von den Ordnern =
enhält, wo es
vorkommt. Ist einfach eine Idee, keine Ahnung ob ich so weiterkommen =
würde.
Ich würde also nicht Order und Subordner nach Items durchsuchen =
müssen und
dann die Sprache lesen. Sondern ich würde nur die Items durchsuchen =
können
und dort auf das Feld mit den Ordnern filtern können...

Tja, ich weiss ist sehr spezifisch und ich habe keinerlei Erwartung dass =
es
gleich durchblickbar ist was das "Problem" ist. Deshalb auch mehr die
business-neutrale Frage, wie bringe ich eine Liste von Ordnern in ein =
Feld
des Items :-)

Patrik


 

> -----Ursprüngliche Nachricht-----
> Von: Pessner, Andreas [mailto:Andreas.Pessner@saxsys.de] 
> Gesendet: Donnerstag, 24. November 2005 08:59
> An: ado.net@glengamoi.com
> Betreff: AW: [Ado.net] SQL Tuning - Werte in einem Feld zusammenfassen
> 
> Die von Dir gewünschte Struktur ist mit SQL eigentlich recht 
> ungewöhnlich - und wird sicher immer recht schlechte 
> Performance bedeuten. =DCber eine Stored Procedure in einem SQL 
> Server sollte das relative leicht gehen - aber unter DOTNET 
> (C#, VB.NET usw.) geht dies sicher schneller - indem du 
> einfach deine Struktur (siehe: "meine Abfrage heute...") in 
> Deine Wunschstruktur umbaust!
> 
> Gibt es einen bestimmten Grund dafür? Was hast Du genau damit vor?
> 
> -----Ursprüngliche Nachricht-----
> Von: ado.net-admin@glengamoi.com 
> [mailto:ado.net-admin@glengamoi.com] Im Auftrag von 
> Drescher-Hackel Rene IT133 (ext)
> Gesendet: Mittwoch, 23. November 2005 11:27
> An: ado.net@glengamoi.com
> Betreff: AW: [Ado.net] SQL Tuning - Werte in einem Feld zusammenfassen
> 
>  
> > 
> > Wie erstelle ich mir eine View, wo ich alle Items kriege 
> und in einer 
> > neuen Spalte alle ItemGroups?
> > 
> > Meine Abfrage heute gibt die folgenden Zeilen:
> > : Item1 : Group1 :
> > : Item1 : Group2 :
> > : Item2 : Group2 :
> > 
> > Aber das möchte ich haben:
> > : Item1 : Group1, Group2 :
> > : Item2 : Group2 :
> > 
> 
> Mit einem Subselect sollte das gehen
> 
> Rene
> _______________________________________________
> Ado.net Mailingliste, Postings senden an:
> Ado.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/ado.net
> 
> 
> _______________________________________________
> Ado.net Mailingliste, Postings senden an:
> Ado.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/ado.net
> 

_______________________________________________
Ado.net Mailingliste, Postings senden an:
Ado.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/ado.net