2009-03-14 9 views
2

Ich habe ein Programm, das Daten in Objekten im Speicher speichert, die Sie sich als kleine db im Speicher vorstellen können. Ich möchte LINQ to Objects verwenden, um einige einfache Abfragen für die im Speicher befindlichen Objekte auszuführen. Gibt es eine bevorzugte Struktur, die ich für die in-Memory-Objekte verwenden soll. Gibt es irgendwelche guten Ressourcen, die ich lesen sollte, bevor ich zu weit in dieses Projekt komme?Beste Objektstruktur für LINQ zum Objekt?

Bearbeiten: Hier finden Sie weitere Informationen zur Anwendung.

Es ist eine winforms-Anwendung, die auch als Dienst ausgeführt werden kann. Es verfolgt den Zustand von maximal 10k Objekten. Jedes Objekt ist relativ eigenständig und ich glaube nicht, dass ich viele Joins machen muss. Da es als Dienst ausgeführt werden kann, füge ich eine Schnittstelle hinzu, die die Informationen über die Objekte abfragen kann. Die Abfragen werden Fragen stellen und Objekte gruppieren, die sie nicht modifizieren. Jedes Objekt wird eher einem Kundenobjekt als einem Produktobjekt ähneln.

+0

Es würde helfen, wenn Sie ein bisschen mehr Informationen und ein Beispiel oder zwei geben. –

Antwort

4

Rex, zunächst ein paar Fragen:

  • ist dies ein WinForms/WPF-App oder ASP.NET? Könnte relevant sein, da ein "kleiner" Speicher im Speicher bei jeder Replizierung für jeden Benutzer/Sitzung/etc.

  • 'kleine db' - wie klein reden Sie hier? 10kb, 100kb, 1Mb? Eigentlich glaube ich nicht, dass die Größe so wichtig ist wie die Struktur, die Sie wählen (innerhalb gewisser Grenzen, wie z. B. physischer RAM!), Aber es könnte für andere Beantworter hilfreich sein.

  • 'einfache Abfragen' - können Sie weitere Informationen darüber geben, wie die Objekte und Abfragen aussehen? Haben Sie eine Customer mit Name,Address,Age, oder denken Sie mehr über Products mit mehreren Sizes platziert in mehreren Orders mit verschiedenen Payment s ... oder etwas noch komplexer?

Dann werden einige Gedanken:

  • Halten Sie die Objektgraph/Baum/Hierarchie flach (insbesondere die Eigenschaften, die Sie abfragen möchten). Linqing auf where Customer.Zipcode = 90210 scheint nicht viel anders zu where Customer.Address.Zipcode = 90210, aber es scheint mir, dass je komplexer Sie mit geschachtelten Objekten erhalten desto schwieriger wird es für das Framework effiziente Abfragen erstellen.

  • Wenn Sie bereits wissen, was die Abfragen im Voraus sein werden, und sie für Ihre Anwendung wichtig sind, sollten Sie vielleicht Datenstrukturen "bauen", um die Abfragen zu unterstützen, anstatt sich nur auf Linq zu verlassen. Um ein Beispiel zu geben, speichert die searcharoo.net Suchmaschine alle ihre Daten im Speicher als Objekte (kann leicht 1-2 MB oder mehr sein), aber die Abfrage-Mechanismus ist ein paar benutzerdefinierte Hashtables (ref), die sehr schnell sind.

Im Gespräch mit Ihrem Kommentar denkt an so klein db im Speicher gibt es zwei ‚Produkte‘ Das könnte nützlich für Sie:

  • Indexed Linq sollten, damit Sie Indizes angeben auf Ihrer Objekt-Sammlung, um bestimmte Abfragen schneller zu machen. Es ist ein Work-in-Progress, aber könnte für Ihre Bedürfnisse nützlich sein.

  • ComponentOne LiveLinq 's Website sagt "LiveLinq verwendet Indizierung und andere Optimierungen, um LINQ Abfragen im Speicher zu beschleunigen". Es klingt sehr nach Indexed Linq, wird aber ein kommerzielles Produkt sein.

HTH

Verwandte Themen