Ich habe eine gespeicherte Prozedur, die eine große Ergebnismenge (fast 20 Millionen Datensätze) zurückgibt. Ich muss dieses Ergebnis in mehreren XML-Dateien speichern. Ich verwende derzeit ADO.Net, um ein Dataset zu füllen, aber es löst System.OutOfMemoryException schnell aus. Welche anderen Methoden kann ich verwenden, um dies zu erreichen?Speichern Sie große Ergebnismenge auf mehrere XML-Dateien
Antwort
Verwenden Sie SQL Server?
In diesem Fall gibt es eine SQL-Anweisung zum automatischen Konvertieren des Ergebnisses einer Abfrage in eine XML-Struktur, die Sie dann als String in der Anwendung erhalten würden.
Optionen:
spalten Sie die Zeichenfolge in mehr und sie in Dateien speichern (in der App)
PS modifizieren führen in mehr XML-Objekte zu spalten sie dann als verschiedene Saiten bekommen/row (1 Zeile => 1 Objekt) und speichere jede Datei in eine Datei.
schreiben eine neue PS, der die ursprüngliche PS, Split Ergebnis in X XML-Objekte aufruft, dann X XML-Strings zurückgibt, die Sie gerade in der Anwendung speichern haben
SQL Server verwenden?
die XML in der PS-Formatierung tun oder schreiben Sie eine neue, die es
Wie auch immer der Fall ist, denken, wenn es einfacher sein wird, die XML-Formatierung Serverseite
Angenommen, Sie verwenden SQL Server zu tun - Sie kann Paging in Ihrer gespeicherten Prozedur verwenden. ROW_NUMBER ist eine Option. SQL Server 2012 und höher unterstützen OFFSET and FETCH.
Wie viele DataTables füllen Sie auch? Es gibt Zeilenbegrenzungen für DataTables.
Die maximale Anzahl von Zeilen, die eine Datentabelle speichern ist 16.777.216
https://msdn.microsoft.com/en-us/library/system.data.datatable.aspx
- 1. clojure.java.jdbc/Abfrage große Ergebnismenge träge
- 2. große Ergebnismenge von mysql select Abfrage
- 3. beschleunigen große Ergebnismenge Verarbeitung mit rmongodb
- 4. Speichern Sie mehrere Backbone-Modelle auf einmal
- 5. Hibernate - große Dateien speichern
- 6. Wie speichern Sie extrem große Zahlen?
- 7. speichern große Daten Python
- 8. So speichern Sie große Objekte mit dem Redis-Cache
- 9. Speichern Sie mehrere Werte in Sitzung PHP
- 10. Wie speichern Sie mehrere Datensätze in Array?
- 11. Speichern Sie große Datenrahmen in Redis durch R
- 12. Wie speichern Sie große Daten in der Anwendung?
- 13. Was tun, wenn Sie eine (sehr) große Zahl speichern müssen?
- 14. Große Objekte in Couchbase speichern - Best Practice?
- 15. PHP Speichern Sie mehrere Kontrollkästchen Werte
- 16. Beste Art, große Datenmengen zu speichern
- 17. Es ist möglich, eine große SQL Server-Datenbank Ergebnismenge mit Dapper?
- 18. Python: DISTINCT auf GQuery-Ergebnismenge (GQL, GAE)
- 19. So speichern Sie mehrere Daten in Ruby
- 20. Wie speichern Sie mehrere Elemente in IDictionary?
- 21. Verketten Sie zwei große pandas.HDFStore HDF5-Dateien
- 22. Excel VBA: Kopieren Sie mehrere Variablen große Tabellen/Bereiche in große Datenblatt
- 23. Download große Videodateien auf iPhone
- 24. Vor dem Start der Ergebnismenge läuft mehrere sql
- 25. Javascript mehrere Anrufe oder 1 große
- 26. C# - Große Datei in mehrere Dateien aufteilen
- 27. speichern, wie man große Dezimalzahlen in mysql
- 28. Matlab: Das Speichern große Zahl in Matlab
- 29. Große O-Effizienz für mehrere Variablen
- 30. Keras: Batch-Training für mehrere große Datensätze
eine XML-Bibliothek verwenden, die streamen. z.B. spucke xml aus, ohne dass die gesamte Datenstruktur im Speicher/verfügbar sein muss. lese einen Datensatz, spucke ein xml dieses Datensatzes aus, wiederhole es. –
@Marc: Ich folge deiner Idee nicht ganz. Hast du ein Beispiel? Ich versuche gerade "For XML PATH" und es bringt das Ergebnis zu einem riesigen XML. Ich suche nach einer Möglichkeit, dies in mehrere XML-Datensätze zu teilen, die ich in XML-Dateien schreiben kann. –
Anstatt ein 'DataSet' zu füllen, können Sie einen geeigneten [' DataReader'] (https://msdn.microsoft.com/en-us/library/haa3afyz.aspx) erhalten und von diesem in eine Datei streamen, indem Sie '' verwenden XmlWriter? – dbc