Ich baue eine komplexe Anwendung. Ein Teil dieser Anwendung ist ein Agent, der auf anderen Servern ausgeführt wird und Daten an einen Webdienst (ASP MVC) -> JSON sendet. Im Controller konvertiere ich die Daten in XML und rufe eine gespeicherte Prozedur auf, die es in einer Tabelle speichert. Ein SQL-Agent-Job übernimmt die Daten und führt die erforderlichen Erstellungs-, Aktualisierungs- & Löschoperationen für einige Tabellen aus.Einfügen von großen BLOB dauert lange
So weit so gut ...
Das Problem hier ist die Geschwindigkeit. Das generierte XML hat eine Größe von mehreren MB. Derzeit ist es ~ 16MB. Das Einfügen der XML-Zeichenfolge in eine neue DB-Zeile dauert 5-6 Sekunden. Was
Ich habe versucht:
- die DB-Säule in XML geändert. Gleiches Ergebnis!
- Ich dachte, das Problem ist Entity Framework. Ich habe diesen Code durch eine gespeicherte Prozedur ersetzt. Gleiches Ergebnis!
- Alle Anweisung aus dem SP entfernt -> leere gespeicherte Prozedur. Gleiches Ergebnis!
- Der Parametertyp wurde von string/nvarchar (max) in byte []/varbinary (max) geändert. Dies brachte einige Verbesserungen. Es ist jetzt 50% schneller. Aber immer noch langsam.
Es scheint, dass die Übergabe dieser großen Zeichenfolge oder Byte-Array an den SQL-Server sehr lange dauert!
Was kann ich tun, um das schneller zu machen?
Ich dachte über Folgendes nach: - Legen Sie die Daten in das Dateisystem und weisen Sie den SQL Server an, sie mit SELECT FROM OPENROWSET zu verarbeiten.
Gibt es Alternativen?
Was ist die Definition der Tabelle? Speichern Sie als Text oder verwenden Sie SQL Server-XML-Unterstützung, um es zu analysieren? – Richard
Sie können die Daten auf der Festplatte speichern und einen Dateizeiger/Pfad in der Datenbank haben. In den meisten Situationen ist dies ein besserer Ansatz. Es hält Ihre Datenbank kleiner, weniger Fragmentierung, bessere Leistung, einfacher zu Änderungen an den Daten persistent. Ich bin mir sicher, dass es da draußen Artikel darüber gibt, wie man (größere) Blobs aus der Datenbank heraushält. – Igor
Das könnte Sie interessieren: [Programmers Stackexchange - Ist es eine schlechte Übung, große Dateien in einer Datenbank zu speichern?] (Http://programmers.stackexchange.com/a/150787), insbesondere die 2. Antwort zu 'FILESTREAM 'wenn du weitermachen willst. – Igor