2009-03-18 13 views
1

Ich muss eine kleinere Windows Forms-Anwendung (Produktkonfigurator) zu einer asp.net-App, die auf einer großen Unternehmenswebsite verwendet werden, sollte die Nachfrage moderat sein, weil es für eine ist spezialisierte Produktlinie.xml Parsing/Abfrage Performance-Frage für asp.net

Ich habe keinen Zugriff auf eine Datenbank und die Verwendung von XML ist eine Anforderung von ihren Webentwicklern.

Es gibt ungefähr 30 verschiedene Produkte mit ungefähr 300 verschiedenen möglichen Konfigurationen, die in den XML-Dateien gespeichert sind, und verknüpfte Fragen/Antworten, die zu einer Produktempfehlung führen. Auch einige Produktionsmöglichkeiten. Die App ist in 6 Sprachen verfügbar.

Wie würden Sie den Layer "Datenzugriff" lösen, wenn Sie es so nennen könnten? Ich dachte daran, die XML-Dateien in ihre Objekte zu lesen/zu deserialisieren und sie im Cache von asp.net zu speichern, wenn sie nicht schon da sind, und sie dann bei nachfolgenden Anfragen aus dem Cache auszulesen. Aber das würde bedeuten, dass alle Objekte Tag und Nacht in der Erinnerung leben.

Ist das überhaupt notwendig oder schlau, leistungsmäßig? Wie ich schon sagte, die App ist nicht so groß, die XML-Dateien nicht so groß. Könnte ich einfach eine Repository-Klasse erstellen, die die XML-Dateien liest, wenn ein Objekt angefordert wird (z. B. "Produktdetails" oder "Nächste Frage") und es auf diese Weise zurückgibt und den Speicherverbrauch senkt?

Antwort

1

Der gesamte Ansatz scheint auf einem einzigen Server zu bleiben. Überlegen Sie zuerst, ob dies angebracht ist, da Sie eine "große Firmenwebsite" erwähnt haben, die eine rote Fahne für mich setzt. Wenn Sie die Website skalieren möchten, verfügen Sie über mehr als einen einzelnen Server, was die Berücksichtigung einer einfachen lokalen Datei verhindert.

Wenn Sie dazu gezwungen sind, analysieren Sie, welche Daten besser im Cache zu halten sind (ändert sich nicht oft, es ist langlebig, die gleichen Informationen werden unterschiedlich oft angefordert). Versuchen Sie, den zwischengespeicherten Inhalt von dem nicht zwischengespeicherten zu trennen, wodurch sich die Menge an Informationen in den dynamischeren Dateien verringert. Wenn Sie große Mengen an Informationen erwarten, sollten Sie die Dateien mit einer für Ihre Domain geeigneten Datei aufteilen.

+0

es wird garantiert, auf einem einzigen Server zu laufen ... – kitsune

+0

Ich würde gerne eine Datenbank verwenden, aber es sind die Systemadministratoren des Unternehmens, die mich daran hindern, es zu tun:/ – kitsune

+0

und irgendwie, für mich, die Möglichkeit von mehreren Servern scheint mich zu verhindern, Caching effizient zu verwenden, aber nicht von der Datei-Ansatz ... – kitsune

0

Ich benutze Cache, wann immer ich kann. Ich cache Objekte bei ihrer ersten Anfrage. Wenn der Speicher von Bedeutung ist, lege ich die Ablaufrichtlinie fest. Und ob das der Fall ist oder nicht, wenn der Speicher knapp ist, wird das Framework den Cache trotzdem entladen.

Da es pro Anwendung und nicht pro Benutzer ist, ist es sinnvoll, es zu haben, vor allem, wenn der relative Platzbedarf gering ist.

Wenn Sie später auf mehrere Server erweitern müssen, können Sie auf die gleiche Datei über das Netzwerk zugreifen oder die DA-Ebene ändern, um Daten auf andere Weise (Dienste, Datenbank usw.) abzurufen. Der Caching-Code bleibt gleich und die Leistung wird praktisch nicht beeinflusst.

Wenn Sie die Abhängigkeit festlegen, bleiben Objekte immer aktuell.

Ich bin dafür.

0

Die Verwendung des Caches und das Festlegen einer geeigneten Ablaufrichtlinie, wie von anderen empfohlen, ist ein vernünftiger Ansatz. Ich schlage vor, dass Sie LINQ to XML als Grundlage für Ihren Datenzugriffscode verwenden, da dieser so viel einfacher zu verwenden ist als herkömmliche XML-Abfrageverfahren. Sie können eine anständige Einführung here finden.

+0

Ja, schrieb die App mit LINQ zu xml, danke – kitsune