Frage

Ich bin etwa auf einer Reise beginnen ein Fenster zu schreiben bildet Anwendung, die eine txt-Datei öffnet, das Rohr ist begrenzt und etwa 230 MB groß. Diese App wird dann diese Daten einfügen in eine SQL Server 2005-Datenbank (natürlich muss dies schnell passieren). Ich bin mit c # 3.0 und .NET 3.5 für dieses Projekt.

Ich bitte die App nicht, nur einige kommunale Beratung hier und mögliche Gefahren beraten. Von der Seite, die ich, dass SQL Bulk-Kopie eine Voraussetzung gesammelt habe, ist es etwas, woran ich denken soll (ich glaube, dass mit einer Formular App nur die txt-Datei öffnen wird eine große Anstrengung sein, vielleicht ist es in Blob-Daten brechen?) <. / p>

Vielen Dank, und ich werde die Frage Klarheit bearbeiten, wenn jemand sie braucht.

War es hilfreich?

Lösung

Haben Sie eine WinForms-Anwendung zu schreiben? Es könnte viel einfacher und schneller verwenden SSIS sein. Es gibt einige eingebaute in Aufgaben zur Verfügung besonders Bulk Insert Aufgabe .

Auch lohnt Flat File Bulk Import Methoden Geschwindigkeitsvergleich in SQL Server 2005.

Update: Wenn Sie auf SSIS neu sind, überprüfen Sie einige dieser Seiten aus Sie auf Überholspur zu bekommen. 1) SSIS Kontrollfluss Basics 2) mit SQL Server Integration Services Erste Schritte

Dies ist eine weitere Vorgehensweise: auf Importieren von Excel in SQL-Datei 2005 .

Andere Tipps

Das wird ein Streaming Fangen sein.

Wenn Sie können, nicht Transaktionen hier verwenden. Die Transaktionskosten werden einfach zu groß sein.

Also, was Sie tun werden, die Datei eine Zeile zu einem Zeitpunkt gelesen wird, und legen Sie sie in einer Zeit, in einer Linie. Sie sollten gescheiterte Einsätze in einer anderen Datei-Dump, die Sie später diagnostizieren können und sehen, wo sie versagten.

Zuerst würde ich voran gehen und versuchen, eine Masseneinfügung von ein paar hundert Zeilen nur um zu sehen, dass das Streaming richtig funktioniert und dann können Sie eröffnen alles, was Sie wollen.

Sie könnten versuchen, mit SqlBulkCopy . Damit können Sie von „einer beliebigen Datenquelle“ zu ziehen.

So wie eine Randnotiz, es ist manchmal schneller die Indizes der Tabelle fallen zu lassen und sie nach dem Masseneinfügungsvorgang neu.

Sie sollen erwägen von vollständiger Genesung bulk protokollierten wechseln. Dies wird helfen, Ihre Backups eine vernünftige Größe zu halten.

ich SSIS total empfehlen, können Sie Millionen von Datensätzen eingelesen und reinigen sie in relativ kurzer Zeit auf dem Weg nach oben.

Sie müssen einige Zeit beiseite legen, um sich mit SSIS zu bekommen, aber es sollte sich auszahlen. Es gibt ein paar andere Threads hier auf SO, die wahrscheinlich nützlich sein wird:

Was ist der schnellste Weg, um bulk eine Menge Daten in SQL Server (C # Client) einfügen

Was sind die empfohlenen Lernmaterial für SSIS?

Sie können auch ein Paket von C # erstellen. Ich habe ein C # Programm, das eine 3GL „Masterdatei“ aus einem Altsystem liest (parst in ein Objektmodell unter Verwendung eines API ich für ein verwandtes Projekt haben), nimmt eine Paketvorlage und modifiziert sie ein Paket für die ETL zu erzeugen.

Die Größe der Daten über Sie sprechen ist eigentlich gar nicht so gigantisch. Ich weiß nicht, was Ihre Effizienz Sorgen sind, aber wenn man ein paar Stunden warten kann es einzufügen, könnten Sie überrascht sein, wie einfach das mit einer wirklich naiv Technik zu erreichen, wäre nur jede Reihe einen nach dem anderen EINSETZEN . Batching zusammen tausend oder so Zeilen zu einer Zeit und an SQL Server einreichen kann es machen ziemlich viel schneller als gut.

Nur ein Vorschlag, dass Sie einige ernsthafte Programmierzeit sparen können, wenn Sie es nicht brauchen so schnell wie denkbar. Je nachdem, wie oft dieser Import laufen, ein paar Tage der Programmierung Zeitersparnis könnte leicht wert sein, im Austausch für wartet einige Stunden, während es ausgeführt wird.

Sie können SSIS verwenden für die Lese- und Einsatz, aber es als Paket von Ihrem WinForms-Anwendung aufrufen. Dann könnten Sie in Dinge wie Quelle passieren, das Ziel, Verbindungszeichenfolgen usw. als Parameter / Konfigurationen.

HowTo: http://msdn.microsoft.com/en-us /library/aa337077.aspx

Sie können in SSIS Umgang mit Transformationen und Fehlern aufgebaut und sogar logisch erstellen Verzweigung basierend auf Eingabeparameter.

Wenn das Spaltenformat der Datei mit der Zieltabelle übereinstimmt, wo die Daten am Ende muss, ziehe ich das Kommandozeilenprogramm mit bcp , um die Datendatei zu laden. Es ist unglaublich schnell und Sie können und Fehlerdatei für alle „odd“ Datensätze angeben, die eingefügt werden fehlschlagen.

Ihre Anwendung könnte den Befehl kick off, wenn Sie die Befehlszeilenparameter für sie (Server, Datenbank, Benutzername / Passwort oder vertrauenswürdige Verbindung, Tabelle, Fehlerdatei etc.) Speichern müssen.

Ich mag diese Methode besser als einen BULK INSERT SQL-Befehl ausgeführt wird, weil die Datendatei auf einem System zugänglich vom Datenbankserver sein ist nicht erforderlich. So verwenden Sie Masseneinfügung müssen Sie den Pfad zu der Datendatei angeben zu laden, also muss es ein Weg sichtbar und lesbar durch den Systembenutzer auf dem Datenbank-Server sein, die Last läuft. Zu viel Aufwand für mich in der Regel. : -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top