mongodb hat auch seine grenze erreicht.
Mongodb kürzeste Einführung (1) Installieren und starten Sie in EC2 und setzen Sie plötzlich Zehntausende ein [Mongodb kürzeste Einführung (2) Ich habe nach Zehntausenden gesucht] (http://qiita.com/tottoko/items/68e61daf6eafb03d4b4b) [Mongodb Shortest Introduction (3) Ich habe versucht, sogar Millionen zu beschleunigen] (http://qiita.com/tottoko/items/b6c9430b1e0ab7cb409c)
Herr Mongo, der streng von zig Millionen Daten ist. Seit die Mauer von 100 Millionen in Sicht ist, ist SQL Lite an einem überraschenden Ort aufgetaucht.
[Auswirkungen NoSQL KVS Easy DB Mongo Redis SQLite Was war Gottes Geschwindigkeit vor Ort? .. .. ]] (http://qiita.com/wan-liner/items/ee07442e5bd4afd5b1b5)
Wenn keine Verarbeitung erforderlich ist ↑ Dies war die stärkste.
Genau genommen ist es besser, die Datei als gz im CSV-Reader zu behalten. Das Dekomprimieren im Speicher ist physisch schneller als das Lesen einer Datei von einer normalen Festplatte. Natürlich, außer in Fällen, in denen das Lesen von Dateien schneller ist als der Speicher (SSD? Nvme?). CSV hat also Spalten, daher möchte ich manchmal Platzhalter verwenden.
Um das Lesen der SQL zu vereinfachen, möchte ich, dass Sie einen Platzhalter mit dem Spaltennamen: Spaltenname1 verwenden, um zu maskieren oder automatisch zu bereinigen.
data=dict(zip(keys,row))
Schlüssel ist eine Liste von Spaltennamen Beispiel: ('id', 'title') Zeile ist eine Liste von CSV-Zeilen, die durch Trennzeichen getrennt sind. Beispiel: 1111 "\ t" aaaa Jetzt sind Daten ein Wörterbuch wie {id: 1111, title: aaaa}. Es ist Magie.
cursor.execute('insert into table (:id,:title)',data)
Sie können Platzhalter wie MySQL verwenden. Wenn es kein Wörterbuch ist?
cursor.execute('insert into table (?,?)',row)
Auch Magie conn.text_factory = str
Das hast du mir nicht gesagt, also bist du wütend geworden!
sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings
# coding: utf-8
import sqlite3
import csv
import gzip
conn = sqlite3.connect("honyahonya.db")
conn.text_factory = str
csr = conn.cursor()
keys=(
'id',
'title',
'date',
'article'
)
with gzip.open("honyahonya.csv.gz", 'rU') as f:
reader = csv.reader(f, delimiter="\t")
for row in reader:
#Wenn Sie mit den Daten vertraut sind, können Sie die Überprüfung der Anzahl der Spalten schneller unterlassen
if len(row)==len(key):
d=dict(zip(keys,row))
csr.execute('insert into tracks (id,title,date,article) values(:id,:title,:date,:article)' , d)
conn.commit()
Recommended Posts