optimisez vos imports de données avec migrate
DESCRIPTION
TRANSCRIPT
![Page 1: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/1.jpg)
Optimisez vos imports de données avec Migrate
![Page 2: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/2.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Qui suis-je ?
Matthieu Guillermin• Consultant chez Clever Age
• Java, PHP, Symfony, Play!,... et ... Drupal
@mguillermin
2
![Page 3: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/3.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Agenda
• Contexte
• Solutions d’import de données dans Drupal
• Anatomie d’une tâche Migrate
• Gestion des références entre contenus
• Stratégies d’optimisation
3
![Page 4: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/4.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Imports de données
4
![Page 5: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/5.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Imports de données
• Problème récurrent
• Récupération de contenu initial
• Affichage de données depuis sources externes
• Agrégation de données
• ...
5
![Page 6: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/6.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Imports de données
• Problématiques variées
• Sources : BDD, fichiers, flux,...
• Structures de donnée : plat, relationnel,...
• Fréquences d’imports : one-shot, quotidient,...
• Cibles : Nodes, Files, Users, Taxonomy,...
6
![Page 7: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/7.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Solutions d’import de données dans Drupal
7
![Page 8: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/8.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
« A la main »
• Transfert direct vers la base
• Via des scripts
• En utilisant un ETL
• Schéma cible difficile à appréhender
• Encore + depuis Drupal 7
• Risque d’erreurs important
8
![Page 9: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/9.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
« A la main »
• En utilisant l’API Drupal pour enregistrer les données
• Développement d’un module
• Implémentation de la lecture des données
• Construction de la structure du node
• Utilisation de node_save() pour l’enregistrement
9
![Page 10: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/10.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
« A la main »
• Les +
• Souplesse totale sur la source et les traitements
• Les -
• Beaucoup de travail
• On va « réinventer la roue »
• Difficile de construire la structure « node »
10
![Page 11: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/11.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Feeds
• Module « historique » pour l’import de données
• Au départ, plutôt dédié aux flux XML (RSS)
• Configuration UI + API
• Connecteurs disponibles : XML, CSV, LDAP,...
11
![Page 12: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/12.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Feeds• Les +
• Rapide à mettre en place
• Configuration via l’interface
• Connecteurs disponibles
• Les -
• Peu adapté aux gros volumes de données
• Difficile de gérer les cas « particuliers »
• Références entre les contenus12
![Page 13: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/13.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Migrate
• Module dédié à l’import de données
• Interface graphique minimale
• Nécessite de « coder » les imports
• Fournit des outils clés en main (lancement de tâches, ...)
• Peut faire peur de prime abord
13
![Page 14: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/14.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Migrate
• Les +
• Connecteurs fournis
• Performances sur de gros volumes
• Gestion des références entre contenus
• Les -
• Nécessite d’écrire du code
• ça pourrait être un + !
14
![Page 15: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/15.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
En résumé
• Feeds
• Si vous voulez une interface simple
• Si il suffit à votre besoin
• Et si vous aimez cliquer
• Sinon, Migrate
• Pas si compliqué que ça
15
![Page 16: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/16.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Anatomie d’une tâche Migrate
16
![Page 17: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/17.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Source
• Gère le requêtage des données
• SQL : MySQL, Oracle, MSSQL,..
• Fichiers : CSV, XML, ...
• Fournit une série d’enregistrements
• Avec les valeurs des champs
• S’occupe du parcours des données
• Extensible en cas de besoin
17
![Page 18: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/18.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Source$query = Database::getConnection('myDb', 'myDbKey') ->select('article', 'a');$query->innerJoin(‘article_category’, ‘ac’, ‘a.category_id = ac.id’);
$query->fields(‘a’, ‘id’);$query->fields(‘a’, ‘title’);$query->fields(‘a’, ‘content’);$query->fields(‘ac’, ‘name’, ‘cat_name’);
$this->source = new MigrateSourceSQL($query, array(), NULL, array('map_joinable' => FALSE));
18
![Page 19: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/19.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
$this->source = new MigrateSourceCSV($source_file, $this->csvcolumns(), array('header_rows' => 1), array());
function csvcolumns() { $columns[0] = array('title', 'Title'); $columns[2] = array('desc', 'Description'); return $columns;}
Source
19
![Page 20: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/20.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
$items_url = $xml_folder . 'positions.xml';$item_xpath = '/producers/producer'; $item_ID_xpath = 'sourceid';
$this->source = new MigrateSourceXML($items_url, $item_xpath, $item_ID_xpath, $fields);
Source
20
![Page 21: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/21.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Destination• Gère l’enregistrement des données
• Types fournis par Migrate :
• User, Role, Node, Comment, Term, File,...
• Utilise l’API pour enregistrer : node_save, user_save(),...
• Extensible
• on peut créer ses propres types de destinations
21
![Page 22: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/22.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Destination// Node$this->destination = new MigrateDestinationNode( 'article', array('text_format' => 'full_html'));
// Taxonomy$this->destination = new MigrateDestinationTerm( ‘voc_name’);
// User$this->destination = new MigrateDestinationUser();
22
![Page 23: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/23.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
• Associations champs
• Source => Destination
• Peuvent être simples ou + complexes
• Transformation de données
• Conversion de formats
• ...
23
![Page 24: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/24.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
SRC
SRC_ID
SRC_1
SRC_2
SRC_3
DEST
DEST_ID
DEST_1
DEST_2
DEST_3Transfo.
Transfo.
24
![Page 25: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/25.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
• Transformations de données
• Chaîne ➞ tableau (explode)
• Appel de « Callbacks »
• Arguments
• A utiliser suivant les types de champs
• cf les « Migrate*FieldHandler »
25
![Page 26: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/26.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
26
// Default value$this->addFieldMapping('language', 'lang')->defaultValue('fr');
// Multiple$this->addFieldMapping('field_auteur', 'auteurs')->separator(',');
// Callbacks$this->addFieldMapping('title', 'titre')->callbacks('strip_tags', array($this, 'trimTitle'), array($this, 'convertToUtf8')
);
![Page 27: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/27.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
• « Sous le capot »
• les FieldHandlers s’occupent de convertir les valeurs
• Construction des structures en fonction des types de champs
• Utilise les arguments pour savoir comment les générer
27
![Page 28: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/28.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
FieldHandlers
28
// Beforestring(2) "C1"
// After["field_numero"]=> array(1) { ["und"]=> array(1) { [0]=> array(3) { ["value_format"]=> string(10) "plain_text" ["format"]=> string(10) "plain_text" ["value"]=> string(2) "C1" } } }
![Page 29: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/29.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Mapping
29
// Arguments Date$date_args = DateMigrateFieldHandler::arguments('Europe/Paris');
$this->addFieldMapping('field_pub_date', 'pub')->arguments($date_args);
// Arguments Term Reference$this->addFieldMapping('field_categorie', 'categorie')->arguments(array('source_type' => 'tname', 'create_term' => TRUE
));
![Page 30: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/30.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Map
• Correspondance entre ID source et ID destination
• Stockée dans une table dédiée
• Permet de relancer une tâche en « update »
• Permet les « rollbacks »
• Permet les références entre contenus
30
![Page 31: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/31.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
SRC
SRC_ID
SRC_1
SRC_2
SRC_3
DEST
DEST_ID
DEST_1
DEST_2
DEST_3Transfo.
Transfo.
MAPMAPID Src 1 ID Dest 1
ID Src 2 ID Dest 2
Map
31
![Page 32: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/32.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Map
32
$this->map = new MigrateSQLMap($this->machineName, array( 'id' => array( 'type' => 'int', 'unsigned' => TRUE, 'description' => 'Content ID', ) ), MigrateDestinationNode::getKeySchema());
![Page 33: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/33.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Anatomie d’une tâche
• En résumé :
• Source
• Destination
• Mapping
• Map
33
![Page 34: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/34.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
• 1 Migration = 1 Classe PHP
• Doit étendre Migration
• Configuration de
• Source, Destination, Field Mapping, Map
• Effectuée dans __construct()
Migration
34
![Page 35: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/35.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Migration
• Offre des points d’entrée pour
• Altérer les données en lecture
• prepareRow($row)
• Altérer les entités en écriture
• prepare($entity, $row)
• Possibilité d’héritage
• Mutualisation de configuration
35
![Page 36: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/36.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Lancement des tâches
• Pour lancer les tâches
• Ligne de commande
• Drush
• Interface graphique
• Disponible dans le BackOffice
36
![Page 37: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/37.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Lancement des tâches
• Drush
• Différentes commandes : mi, ms, mr, mrs
• Paramètres intéressants :
• «limit» : permet de limiter le nombre d’éléments à importer (ou le temps d’import)
• «feedback» : notifications de l’avancement
37
![Page 38: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/38.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Lancement tâches
38
$ drush ms Name Total Imported Unimported Status Last imported LyonMetroLigneTypes 4 4 0 Idle 2012-05-23 13:49:35 LyonMetroLignes 154 154 0 Idle 2012-05-23 14:08:29 LyonMetroArrets 4036 4036 0 Idle 2012-05-23 13:58:16
$ drush mi LyonMetroLignes --update --feedback="50 items"Processed 50 (0 created, 50 updated, 0 failed, 0 ignored) in 1.4 sec (2156/min) - continuing with 'LyonMetroLignes' Processed 50 (0 created, 50 updated, 0 failed, 0 ignored) in 1.9 sec (1566/min) - continuing with 'LyonMetroLignes'Processed 50 (0 created, 50 updated, 0 failed, 0 ignored) in 2.2 sec (1377/min) - continuing with 'LyonMetroLignes'Processed 4 (0 created, 4 updated, 0 failed, 0 ignored) in 0.3 sec (899/min) - done with 'LyonMetroLignes'
![Page 39: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/39.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Lancement tâches
39
![Page 40: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/40.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
En pratique...
40
![Page 41: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/41.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Gestion des références entre contenus
41
![Page 42: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/42.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Références entre contenus• Prérequis
• Mécanisme de dépendances entre tâches
• Si B est dépendant de A
• La tâche A devra être lancée avant la tâche B
$this->dependencies = array('MigrationA');
42
![Page 43: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/43.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Références entre contenus• Tables ‘Map’
• Correspondances entre ID src. & dest.
• Permet à Migrate de gérer les références
• Dans le mapping :
$this->addFieldMapping('field_a_dest', 'field_a_src') ->sourceMigration('MigrationA');
43
![Page 44: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/44.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Références entre contenus• Lors de l’import de ce champ dans B :
• L’Id source va être « converti » en Id Destination en utilisant la table Map de la Migration A
• C’est l’Id « converti » qui sera enregistré dans le contenu
44
SELECT destid1 /* nid/tid/uid/fid */FROM migrate_map_A /* Map table for ‘A‘ */WHERE sourceid1 = :id_src /* id in ‘A’ src table */
![Page 45: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/45.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
• Import de A
Références entre contenus
45
SRC_A
SRC_ID
...
MAP_AMAP_A1023 378
1029 379
... ...
NODE
NID
...
![Page 46: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/46.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Références entre contenus
46
SRC_B
SRC_ID
A_ID
MAP_BMAP_B4204 455
4605 456
... ...
NODE_B
NID
A_REF
MAP_AMAP_A1023 378
1029 379
... ...
• Import de B
![Page 47: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/47.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
En pratique...
47
![Page 48: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/48.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Stratégies d’optimisation
48
![Page 49: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/49.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Requêtage• Comme dans tout import, le requêtage est
essentiel
• Limiter le nombre de requêtes
• Eviter de faire une requête pour chaque ligne source
• INNER JOIN / LEFT JOIN /...
• Optimiser la source (si possible)
• ajout d’indexes
• configuration DB (innodb_buffer_pool_size,...)49
![Page 50: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/50.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Modules « gourmands »
• Désactivation de traitements lors de l’import
• Pathauto : il faut mieux construire l’url « à la main »
• ‘migrate_extras’ fournit un moyen de le désactiver pour une migration donnée
50
![Page 51: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/51.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Highwater Field• Pour les imports réguliers
• N’importer que les données mises à jour depuis le dernier import
$this->highwaterField = array( 'name' => 'last_changed', 'alias' => 'w', 'type' => 'int',);
$query->orderBy('last_changed');
51
![Page 52: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/52.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Highwater Field
• Avec le Highwater Field
• Migrate ajoutera automatiquement une condition sur la requête source
• Restriction des enregistrements sources à traiter
• Ne fonctionne automatiquement que pour les sources : SQL, Oracle & MSSQL
52
![Page 53: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/53.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
preImport()
• En cas de structure de base trop « tordue »
• On peut être amené à faire une première passe pour charger des éléments en mémoire
• Ces éléments seront réinjectés dans chaque contenu cible
• Pour cela on peut utilise la méthode preImport()
53
![Page 54: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/54.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
// Called once during the migration processpublic function preImport() { parent::preImport(); $query = Database::getConnection('myDB') ->select('metas', 'm'); $query->fields('m', array( 'id_doc', 'id_meta', 'valeur'));
/* ... */ $result = $query->execute(); while ($row = $result->fetchObject()) {
if ($row->id_meta == self::ID_META_TITRE) { $this->metas[$row->id_doc]['titre'] = $row->valeur; } if ($row->id_meta == self::ID_META_DATE) { $this->metas[$row->id_doc]['date'] = $row->valeur; } }}
![Page 55: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/55.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
// Called for each source rowpublic function prepareRow($row) { if (isset($this->metas[$row->id_doc]['titre'])) { $row->titre = $this->metas[$row->id_doc]['titre']; }
if (isset($this->metas[$row->id_doc]['date'])) { $row->titre = $this->metas[$row->id_doc]['date']; } return parent::prepareRow($row);}
![Page 56: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/56.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
En cas de besoin• Attention à la mémoire
• On peut être amené à ajuster la memory_limit
• Séparation en 2 migrations
• Utilisation de «system of record»
• Seuls les champs «mappés» seront écrasés
56
$this->systemOfRecord = Migration::DESTINATION;
![Page 57: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/57.jpg)
Drupal Camp Lyon - Optimisez vos imports de données avec MigrateMatthieu Guillermin - Mai 2012
Des questions ?
57
![Page 58: Optimisez vos imports de données avec Migrate](https://reader033.vdocuments.net/reader033/viewer/2022051610/5492a88eb479597e6a8b598f/html5/thumbnails/58.jpg)
Merci pour votre attention !@mguillermin