2009-05-27 12 views
0

Ich arbeite derzeit an der Entwicklung eines Windows-Dienstes, der an allen Arbeitsplätzen innerhalb des Unternehmens bereitgestellt wird. Der Zweck des Dienstes besteht darin, verschiedene Statistiken zu sammeln und sie an einem zentralen Ort aufzuzeichnen.Datenerfassung von mehreren Workstations

Für die erste Iteration führt der Dienst einen direkten Aufruf von SQL aus, um jedes Mal aufzuzeichnen, wenn Daten aufgezeichnet werden sollen. Das Testen auf etwa 120 Workstations hat mir gesagt, dass es keine gute Idee ist und nicht skalieren wird.

Kann jemand eine alternative Strategie zum Sammeln der fraglichen Daten empfehlen, die den Datenbankserver nicht überlasten? Dies wird auf ungefähr 2000 Maschinen bereitgestellt.

Ich arbeite mit C#.

Danke.

Antwort

0

Antworten Sie einfach, um die Frage zu beenden. Hier ist, wie ich es umgesetzt habe.

Data Collection

  • A C# Service läuft auf den Workstations. In verschiedenen Intervallen (nicht vorbestimmt, basierend auf bestimmten Ereignissen im System) wird die Datensammlung ausgelöst.
  • Daten werden in eine Datei auf der lokalen Arbeitsstation geschrieben.
  • Die Datendatei wird dann an einen Netzwerkspeicherort kopiert.

Daten Parsing

  • Ein "Importeur" Programm läuft auf einem Zeitplan. Es durchläuft alle seit der letzten Ausführung erstellten Textdateien, analysiert sie und importiert sie in SQL.

Der Grund, warum ich es umgesetzt diese Art und Weise ist es:

  • Vermeiden Ressource Probleme mit meinem SQL Server, die ich in der ursprünglichen Frage erwähnt.
  • Dateien erstellt sind sehr klein, 1-2KB
  • Importeur läuft ein paar Minuten in der Vergangenheit, um Kollisionen mit laufenden Kopien zu vermeiden.
  • Der Importer löscht die Dateien, die verarbeitet wurden und überspringt die Dateien, die nicht im Fenster "histscanime" und "currentTime-Xminute" enthalten sind.
1

Aus Ihrer Frage scheint es, dass Sie bereits eine funktionierende Lösung haben und Sie brauchen nur Ratschläge, wie Sie es skalieren können. Hier sind meine zwei Cent:

  • Sie halten nicht die SQL-Verbindungen offen in den Dienst der Workstation
  • Try batching Datenaktualisierungen im Speicher und nur die Datenbank aktualisieren, nachdem eine bestimmte Menge an Daten gesammelt worden sind oder ein bestimmtes Intervall ist vorbei (macht Ihre Verbindung weniger gesprächig und klobiger).
  • Stellen Sie sicher, Ihre Datenbank ordnungsgemäß normalisiert wird doppelte Daten

persönlich für etwas missionskritische, um zu verhindern, dass es bis 2000 Arbeitsplätze skalieren erfordert, würde ich ein kommerzielles Produkt verwenden und würde nicht das Rad neu erfinden .

+0

Ich endete es in zwei Phasen zu implementieren. Siehe die Details in meiner Antwort unten. Soweit kommerzielle Produkte, konnte ich keine finden, die sehr spezielle Bedürfnisse befriedigen würden, die ich erfüllen sollte. danke, obwohl. – Nasir

Verwandte Themen