Migració a postgres des de sqlite


Escrit per Aaloy a 13 de June , 2010 a les 2 p.m.

Pels qui no ho sabíeu aquest blog corria damunt una base de dades sqlite3. La base de dades és prou ràpida per les necessitats d'un blog com aquest, però té un emperò considerable: consumeix molta memòria comparada amb un mysql o postgresql. Quan el blog duia una parell de setmanes amb visites que consultàven molts apunts, sqlite començava a cachejar i el consum de memòria de l'aplicació del blog es disparava fins als 160 Mb, mass si ho comparam amb altres aplicacions tant o més complexes que executant-se amb Postgresql estàven entre 30 i 50 Mb. El consum de Postgres és una altra cosa, però com que es reparteix millor entre les aplicacions el resultat final és un estalvi de memòria.

El procés per passar d'sqlite3 a Postgres ha estat el següent:

  1. Feim un dump de les dades cap a json. Això es pot fer des de Django amb la comanda dumpdata, per exemple:

    python manage.py dumpdata contenttypes > dumps/contenttypes.json

He fet dumps de sites, auth per la part d'usuaris, contenttypes, i després de tota la resta d'aplicacions que fa servir el blog.

  1. Cream la base de dades i l'usuari a Postgresql que farem servir, donant-li permisos de creació de taules.

  2. Anam a l'aplicació i canviam la connexió de base de dades de sqlite3 a postgres. Per aixòs basta canviar el DATABASE_ENGINE cap a postgresql_psycopg2 i establir el nom de la base de dades i el password.

  3. Executam la comanda syncdb. Això ens crearà les estructures de dades que necessitam i ara ja poden amar restaurant les dades.

En el meu cas hi ha aplicacions que modifiquen el contenttypes quan es fa el sycndb, de tal manera que abans de restaurar he fet un trunc contentypes cascade a la base de dades.

  1. Restauram, per exemple:

    python manage.py loaddata ./dumps/auth.json

Anam repetint el procés. Començam per contentypes, després per sites, després per auth i després per les nostres aplicacions segons l'ordre de dependències que tenguin.

Això és tot, comprovam que tot és al seu lloc i recarregam l'aplicació.

A més he aprofitat que és diumenge per provar més coses. Això implica que el blog pot veure's una mica afectat, ja que vull provar errors 404, 500, ping cap a google i altres coses que vull provar en real.


Traducciones/Translations by apertium

3 comentaris, 0 trackbacks (URL) , Tags: Python Django


Comentaris

1 Comentari de aaloy a les 02:06 del Sunday 13 Jun de 2010

Aprofit que és diumenge per fer el canvi i a més provar altres coses: errors 404, 500, proves amb la indexació i conversions, ...


2 Comentari de DZPM a les 05:06 del Monday 14 Jun de 2010

Hauries estalviat temps fent el dump de totes les apps alhora!

$ ./manage.py dumpdata contenttypes auth sites


3 Comentari de aaloy a les 07:06 del Monday 14 Jun de 2010

En migracions com aquesta m'agrada tenir-ho tot ben separat. Ja sé que és més temps si no hi ha problemes, però quan n'hi ha el temps extra que has dedicat es veu compensat de sobres.


Avís: Els comentaris es tanquen automàticament als 30 dies