Aktuelle Zeit: 16.08.2018 09:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:15 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Hallo.

Ich habe hier eine verdammt grosse csv Datei (15 GB), die ich in eine SQLite DB überführen möchte.

Hierzu lese ich die Datei Zeile für Zeile aus und füge per "INSERT INTO" diese Zeile in die Tabelle ein.

Kann man das irgendwie beschleunigen, weil man kann zusehen, wie im Explorer die Dateigrösse immer nur um einige
Bytes grösser wird.

Ein "BEGIN" vor der "INSERT" Ausführung und ein "COMMIT" danach bringt irgendwie nichts...

Ich mache das testweise gerade mit einer csv Datei die "nur" 1,5GB hat, bevor ich die 15GB Datei anvisiere ;)

(Für die Interessierten : Es handelt sich um die frei zugänglichen Systemdaten des Spiels "Elite Dangerous" die hier zu finden sind.)

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:23 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Ich würde eine große Datei niemals zeilenweise laden. Das dauert immer am längsten.
Ich würde diese Datei in mehreren Teile (á 1-8 GB, jenachdem wie viel Arbeitsspeicher du frei hast) splitten und diese mit ReadData() auf einmal laden.
Oder dauert das Inserten ebenfalls lange?

Oder du verwendest ein fertiges Konvertierungsprogramm aus dem Internet.

\\Edit:
Geht auch einfacher: https://www.sqlite.org/cvstrac/wiki?p=ImportingFiles

_________________
BildBildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:36 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Das in den Speicher per Linklist zu knallen, dauert bei 1,5 GB ca 40-45 sekunden. das ist vertretbar....
Das "INSERT" dauert so lange. Egal ob die DB im Speicher (":memory:") oder als File auf der Platte ist.
Die nehmen sich beide nichts.

Momentan läuft das Programm was ich schrieb und er ist nach ca 15 Minuten erst bei knapp 11MB Datenbankgrösse....
(Ausgerechneterweise werden das ca. 1,7 GB)

Daher ist nun die Frage, bevor ich an die 15GB csv Datei rangehe, ob man das etwas schneller gestalten kann.
In der Hoffnung das irgendwelche SQL Anweisungen das beschleunigen können.

Edit:
Zitat:
For simple CSV files, you can use the SQLite shell to import the file into your SQLite database. First create the table, then designate the separator, and finally import the file.

sqlite> create table test (id integer, datatype_id integer, level integer, meaning text);
sqlite> .separator ","
sqlite> .import no_yes.csv test


Klingt ja interessant, aber wie mache ich das in PB ? Also die "SQLite shell" benutzen ?

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Zuletzt geändert von Bisonte am 24.08.2017 12:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:38 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Bisonte hat geschrieben:
Daher ist nun die Frage, bevor ich an die 15GB csv Datei rangehe, ob man das etwas schneller gestalten kann.
In der Hoffnung das irgendwelche SQL Anweisungen das beschleunigen können.

RSBasic hat geschrieben:

Du kannst versuchen, in der SQLLite-Shell folgendes auszuführen:
Code:
sqlite> create table test (id integer, datatype_id integer, level integer, meaning text);
sqlite> .separator ","
sqlite> .import no_yes.csv test

_________________
BildBildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:40 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Ah mein edit hat sich überschnitten ;)

Wie führe ich denn etwas per PB in der "SQLLite Shell" aus ?

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:41 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Du lädst die Shell runter und führst ohne PB die Befehle aus. Oder willst du das unbedingt mit PB machen?

\\Edit:
Ja, dein Edit habe ich nach meinem Posting auch gesehen. Wir sind beide zu schnell :D

_________________
BildBildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 12:47 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Eigentlich wollte ich das in PB machen, damit sich das der Nutzer diese Datenbank selbst anlegen kann...

Weil ich nicht wirklich die Möglichkeit habe irgendwo 15GB oder mehr zu hosten.

Und noch ein Edit:

SQLite Shell runtergeladen, mit den Werten eingegeben... Dauer des imports ca 2 Min. bei den 1,5 GB.
Also ist es möglich ;) Jetzt müsste man nur noch wissen, wie die Shell das importiert ....

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 13:06 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Du kannst beispielsweise eine Textdatei für die Befehle vorbereiten, die du einfach zur Shell-Konsole umleitest:
Code:
...\sqlite3.exe < D:\command.txt

Dann kannst du das in deiner PB-Anwendung ausführen.

_________________
BildBildBildBildBild
Bild | EnableExplicit ist kostenlos und vermeidet Fehler | Gib Goto keine Chance | Schneller als die Telekom erlaubt | Avira? Nein Danke
WinAPI forever | Bei Problemen bitte Beispielcode posten | Mit Adblock werbefrei, schneller und sicherer surfen | brain.exe ist der beste Schutz | Userlibrary ohne Source = NoGo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 13:10 
Offline

Registriert: 29.08.2004 13:18
Bisonte hat geschrieben:
Also ist es möglich ;) Jetzt müsste man nur noch wissen, wie die Shell das importiert ....


Vermutlich über interne funktionen, auf die man in PB keinen Zugriff hat. Also nicht über das SQL-Interface.

15GB an Daten zu importieren ist auch eine Hausnummer :)

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Datenbank: Grosse .csv einfügen beschleunigen ?
BeitragVerfasst: 24.08.2017 13:20 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
GPI hat geschrieben:
15GB an Daten zu importieren ist auch eine Hausnummer :)


Das ist wohl wahr....

Allerdings sind das "nur" die erforschten Systeme in dem Spiel. Es handelt sich dabei wohl so um vielleicht 1-2% wenn
ich das mal vorsichtig schätze, sehr weit aus dem Fenster gelehnt :mrgreen:

Die Macher haben wohl bei der prozeduralen Systemerstellung die Abbruchbedingungen falsch eingebaut ... Endlosschleife :D

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye