Je suis nouveau sur Python et Sqlite, donc je suis sûr qu'il y a une meilleure façon de le faire. J'ai un DB avec 6000 lignes, où 1 colonne est une chaîne XML 14K. Je voulais compresser toutes ces chaînes XML pour réduire la taille de la base de données. Malheureusement, le script ci-dessous est beaucoup, beaucoup plus lent que cette simple ligne de commande (qui prend quelques secondes).Compresser la colonne XML dans Sqlite avec Python est SLOW!
sqlite3 weather.db .dump | gzip -c > backup.gz
Je sais que ce n'est pas la même chose, mais il ne sait ni lire/convertir le DB en texte et exécuter gzip. J'espérais donc que ce script serait dans les 10X performances, mais c'est plus comme 1000X plus lent. Y a-t-il un moyen de rendre le script suivant plus efficace? Merci.
import zlib, sqlite3
conn = sqlite3.connect(r"weather.db")
r = conn.cursor()
w = conn.cursor()
rows = r.execute("select date,location,xml_data from forecasts")
for row in rows:
data = zlib.compress(row[2])
w.execute("update forecasts set xml_data=? where date=? and location=?", (data, row[0], row[1]))
conn.commit()
conn.close()
J'ai l'impression que votre problème est avec votre schéma db et non le code Python. Exécutez 'explain select date, location, xml_data à partir de forecast', puis recherchez ce que signifie la sortie de explain http://dev.mysql.com/doc/refman/5.1/en/using-explain.html. En outre, exécutez l'une des mises à jour manuellement et voyez combien de temps il faut pour l'exécuter. – sberry
J'utilise Sqlite, pas MySQL. – projectshave