mongodb a également atteint sa limite.
Introduction la plus courte de Mongodb (1) Installer et démarrer dans EC2 et mettre soudainement des dizaines de milliers [Introduction la plus courte de Mongodb (2) J'ai recherché des dizaines de milliers] (http://qiita.com/tottoko/items/68e61daf6eafb03d4b4b) [Présentation la plus courte de Mongodb (3) J'ai essayé d'accélérer même des millions] (http://qiita.com/tottoko/items/b6c9430b1e0ab7cb409c)
M. Mongo qui est strict à partir de dizaines de millions de données. Depuis que le mur des 100 millions est apparu, SQL Lite est apparu dans un endroit surprenant.
[Impact NoSQL KVS Easy DB mongo redis sqlite Quelle était la vitesse de Dieu localement? .. .. ] (http://qiita.com/wan-liner/items/ee07442e5bd4afd5b1b5)
Si aucun traitement n'est requis ↑ C'était le plus puissant.
À proprement parler, il est préférable de conserver le fichier au format gz dans le lecteur CSV. Il est physiquement plus rapide de décompresser en mémoire que de lire un fichier à partir d'un disque normal. Bien sûr, sauf dans les cas où la lecture des fichiers est plus rapide que la mémoire (SSD? Nvme?). Donc, CSV a des colonnes, donc parfois je veux utiliser des espaces réservés.
Pour rendre le SQL plus facile à lire, j'aimerais que vous utilisiez un espace réservé avec le nom de colonne: nom_colonne1 pour échapper ou nettoyer automatiquement.
data=dict(zip(keys,row))
keys est une liste de noms de colonnes Exemple: ('id', 'title') row est une liste de lignes CSV séparées par des délimiteurs Exemple: 1111 "\ t" aaaa Maintenant, les données sont un dictionnaire comme {id: 1111, title: aaaa}. C'est magique.
cursor.execute('insert into table (:id,:title)',data)
Vous pouvez utiliser des espaces réservés comme mysql. Quand ce n'est pas un dictionnaire?
cursor.execute('insert into table (?,?)',row)
Aussi, la magie conn.text_factory = str
Tu ne m'as pas dit ça, alors tu t'es fâché!
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:
#Si vous avez confiance dans les données, il est plus rapide d'omettre de vérifier le nombre de colonnes
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