Stockage SQL de MDM

EnrichVersion
6.4
6.3
6.2
6.1
6.0
5.6
EnrichProdName
Talend MDM Platform
Talend Data Fabric
Talend Open Studio for MDM
task
Installation et mise à niveau
EnrichPlatform
Talend MDM Server

Stockage SQL de MDM

Un nouveau stockage pour MDM basé SQL permet à MDM de stocker les données utilisateurs dans un système de gestion de base de données relationnelle (SGBDR).

Le stockage SQL de MDM fournit les mêmes services que la base de données XML de Talend (dépréciée depuis la version 5.3), tout en permettant une meilleure performance et évolutivité.

Pour utiliser le stockage SQL de MDM, vous n'avez pas besoin de modifier vos Jobs ou modèles de données, car MDM continue à communiquer avec le client via des documents XML. Les composants MDM tels que le tMDMInput, le tMDMOuput et le tMDMBulkload sont supportés lorsqu'une base de données SQL est utilisée.

Cependant, les procédures stockées de MDM doivent être écrites en utilisant les instructions SQL, car la requête est directement exécutée sur la base de données sous-jacente (lors de l'utilisation d'une base de données XML, les procédures stockées étaient écrites en utilisant XQuery).

Pour plus d'informations sur la gestion des problèmes que vous pouvez rencontrer avec le stockage SQL de MDM, consultez Résolution de problèmes relatifs au stockage SQL de MDM.

Cet article s'applique à la version 5.2.0 et suivantes de la solution MDM de Talend.

Principes de fonctionnement du stockage SQL de MDM

Dans MDM, les conteneurs utilisateur sont utilisés pour héberger des données maître et en préparation, alors que les conteneurs système sont utilisés pour stocker des données spécifiques à MDM, par exemple, les informations des utilisateurs et les définitions des vues.

À compter de la version 5.3, aucune différence n'existe entre les conteneurs système et les conteneurs utilisateur, car les deux peuvent utiliser le stockage SQL.

Tous les conteneurs de données définis comme n'étant pas utilisateur sont considérés comme des conteneurs système, excepté UpdateReport. Depuis que ce conteneur utilise un format bien défini, il est stocké dans des bases de données SQL lorsque le stockage SQL est activé.

Lorsque MDM reçoit une demande qui peut être soit une requête, soit une demande "create record", soit une demande "update record", il identifie d'abord si la demande se trouve sur un conteneur système ou utilisateur. Il transmet ensuite cette demande au bon stockage.

Chaque stockage SQL est indépendant : il dispose de son propre pool de connexions et de sa propre configuration. Cette indépendance est importante car elle a un impact direct sur le nombre de connexions que MDM établit avec les bases de données SQL. Si vous disposez de deux conteneurs de données et de 20 connexions au minimum, cela signifie que MDM crée 40 (20*2) connexions lors du démarrage.

Pour supporter différents types de SGBDR, le stockage SQL utilise Hibernate en interne pour pouvoir supporter divers types de bases de données.

Pour plus d'informations sur Hibernate, consultez http://www.hibernate.org/ (en anglais).

Configurations courantes pour l'utilisation du stockage SQL de MDM

Une fois l'installation du serveur MDM terminée, vous devez effectuer plusieurs tâches de configuration avant d'utiliser le stockage SQL de MDM.

Procédure

  1. Allez dans le répertoire où est installé le MDM de Talend, puis ouvrez le fichier mdm.conf dans le répertoire <mdm_jboss_dir>\jboss-4.2.2.GA\server\default\conf.
  2. Assurez-vous que la configuration est correcte, comme ci-dessous.
    xmlserver.class=com.amalto.core.storage.SQLWrapper
     
    db.autoPrepare=true
     
    db.datasources=datasources.xml
     
    db.default.datasource=MySQL-Default

    Ces propriétés sont expliquées dans le tableau suivant :

    Propriété

    Description

    db.autoPrepare

    Indique à MDM s'il doit essayer (ou non) de créer lui-même une base de données. Par défaut, la valeur vaut true.

    db.datasources

    Pointe vers un fichier qui fournit des informations sur la connexion à la base de données. Aucune valeur par défaut n'existe pour cette propriété. L'installeur déploie un fichier nommé “datasources.xml”. MDM recherche le fichier dans l'ordre suivant :

    1. Dans le dossier vers lequel la propriété système “jboss.server.home.dir” pointe.
    2. À la racine du classpath de l'application MDM.

    db.default.datasource

    Dit à MDM quelle source de données est utilisée par défaut dans le fichier db.datasources. Vous pouvez avoir différentes sources de données telles que “MySQL-Dev” et “MySQL-Prod” et utiliser cette propriété pour passer d'un environnement à un autre.

    Dans cet exemple, mdm.conf définit la valeur de autoPrepare en tant que true, utilise le fichier datasources.xml en tant que fichier de configuration des sources de données et définit la valeur de defaultDataSource en tant que MySQL-Default.

  3. Dans le même répertoire, ouvrez le fichier datasources.xml pour vérifier la configuration des sources de données.
    <datasources xmlns=”http://www.talend.com/mdm/datasources"”>
        <datasource name=”MySQL-DS1> <!-- (1) -->  
            <master>
                <type>RDBMS</type> <!-- (2) -->
                <rdbms-configuration>
                    <dialect>MySQL</dialect> <!-- (3) -->
                    <connection-driver-class>com.mysql.jdbc.Driver</connection-driver-class> <!-- (4) -->
                    <connection-url>jdbc:mysql://10.42.150.15:3306/mdm_dev1</connection-url> <!-- (5) -->
                    <connection-username>root</connection-username> <!-- (6) -->
                    <connection-password>toor</connection-password> <!-- (7) -->
                    <fulltext-index-directory>/var/lucene/indexes/DS1</fulltext-index-directory> <!-- (8) -->
                    <cache-directory>/var/cache/DS1</cache-directory> <!-- (9) -->
                    <contains-optimization>fulltext|disabled|like</contains-optimization> <!-- (10) -->
                    <schema-generation>update</schema-generation>  <!-- (11) -->
                    <properties>
                        <property name="hibernate.show_sql">false</property> <!-- (12)-->
                    </properties>
                    <init>
                        <database-name>mdm_dev1</database-name> <!-- (13) -->
                        <connection-url>jdbc:mysql://10.42.150.15:3306/</connection-url> <!-- (14) -->
                        <connection-username>root</connection-username> <!-- (15) -->
                        <connection-password>toor</connection-password> <!-- (16) -->
                    </init>
                </rdbms-configuration>
            </master>
            <staging>
                <!-- same content: this configures database for the staging area -->
            </staging>
            <system> <!-- New for 5.3 -->
                <!-- same content: this configures database for the system storage -->
            </system>
        </datasource>
    </datasources>

    Les explications de chaque propriété dans le fichier de configuration des sources de données sont les suivantes :

    • (1) Nom unique qui identifie la source de données.
    • (2) Dit à MDM de quel type est la source de données. Seule la valeur RDBMS est actuellement supportée.
    • (3) Spécifie un dialecte pour MDM afin d'utiliser des générateurs de requêtes SQL spécifiques à la base de données.
    • (4) Classe de pilote JDBC. Notez que la classe doit se trouver dans le classpath du serveur MDM.
    • (5) URL de la connexion à JDBC. Elle est généralement dépendante du pilote JDBC.
    • (6) Nom d'utilisateur de la connexion.
    • (7) Mot de passe de la connexion.
    • (8) Ce stockage SQL permet les recherches plein texte. Cette propriété dit à MDM où les indices plein texte doivent être stockés sur le disque. Si cette propriété est manquante, le stockage ne peut effectuer de recherches plein texte.
    • (9) Cette propriété dit à MDM où le cache de second niveau doit stocker les informations (le cache de second niveau exploite EHCache). Si cette propriété est manquante, le stockage n'utilise pas le cache de second niveau. Cela n'apporte pas plus d'améliorations, car MDM utilise déjà le cache de premier niveau de Hibernate. Cela peut devenir utile pour de grands volumes de données avec de nombreuses demandes en enregistrements aléatoires.
    • (10) Type d'optimisation de requêtes "contains" : la valeur "fulltext" (par défaut) indique que MDM doit utiliser des requêtes plein texte pour des contenus lorsqu'elles sont applicables. La valeur "like" signifie que MDM doit utiliser des instructions de bases de données "LIKE". La valeur "disabled" signifie que MDM retourne une exception chaque fois qu'une requête "contains" est traitée.
    • (11) Indique le type d'actions à effectuer sur le schéma de la base de données.

      Trois valeurs sont valides pour l'élément schema-generation :

      Valeur

      Effet

      update

      Mise à jour du schéma existant : ajoute des colonnes pour les éléments récemment ajoutés à une entité. Cela n'enlève aucune des restrictions précédentes et aucun élément précédemment enlevé.

      create

      Supprime les tables existantes avant de recréer des tables. Vous pouvez utiliser ce mode lorsque vous n'êtes pas sûr du modèle de données. Ce mode enlève les restrictions et colonnes obsolètes ainsi que les données précédentes.

      validate

      N'effectue aucun changement de schéma. Assurez-vous que le schéma de la base de données peut stocker des enregistrements MDM. En cas d'erreur, l'initialisation du stockage SQL échoue. Pour plus d'informations, consultez le log ou la console de votre serveur.

      Lorsque la valeur de <schema-generation> est "create", des erreurs de création de schéma n'arrêtent pas l'initialisation du stockage SQL : Hibernate génère des instructions SQL qui échouent lorsque vous commencez sur une base de données vide. Pour observer ces erreurs, activez la catégorie Log4j "com.amalto.core.storage" au niveau de DEBUG.

    • (12) Cet exemple indique s'il faut montrer ou non les instructions SQL dans la console. Si sa valeur vaut true, toutes les instructions SQL sont écrites dans la console. Activez cette option pour la résolution de problèmes. Notez que les informations verbeuses sont mises en sortie après avoir activé cette option.
    • (13) Nom de la base de données : il est utilisé lors de l'initialisation du stockage lorsque la valeur de l'option autoPrepare vaut true dans le fichier mdm.conf. MDM essaye de créer une base de données nommée d'après cette valeur sur l'initialisation du stockage.
    • (14) (15) (16) Lorsque l'option autoPrepare est activée, ces identifiants sont utilisés pour créer une base de données nommée d'après (13).

    Tout ce qui est contenu dans les propriétés (“properties”) est adopté tel quel dans la configuration Hibernate. Toutes les propriétés de la section de configuration annulent la configuration que MDM génère (aucun contrôle ou validation n'est effectué sur les valeurs adoptées ici). Pour plus d'informations sur les propriétés que vous pouvez configurer, consultez la documentation relative à Hibernate.

Utilisation de variables dans le fichier de configuration des sources de données

Vous pouvez utiliser des variables dans la configuration des sources de données.

Par exemple, utilisez la variable ${container} dans la configuration des sources de données.

<datasources xmlns=”http://www.talend.com/mdm/datasources"”>
    <datasource name=”MySQL-DS1?>
        <type>RDBMS</type>
        <rdbms-configuration>
            <connection-url>jdbc:mysql://10.42.150.15:3306/${container}</connection-url>
            <database-name>${container}</database-name>
            <init>
                <database-name>${container}</database-name>
                <connection-url>jdbc:mysql://10.42.150.15:3306/</connection-url>
                <connection-username>root</connection-username>
                <connection-password>toor</connection-password>
            </init>
        </rdbms-configuration>
    </datasource>
</datasources>

La variable ${container} est remplacée par le nom du conteneur de données lors de sa création.

Par exemple, lorsqu'un conteneur "Product" est créé, la valeur de l'élément <connection-url> est la suivante "jdbc:mysql:10.42.150.15:3306/Product". L'élément <database-name> est également remplacé par la valeur "Product".

L'élément <connection-username> accepte aussi la variable ${container}.

Utilisation de plusieurs vendeurs de bases de données dans le fichier de configuration des sources de données

Vous pouvez utiliser plusieurs vendeurs de bases de données pour les différents stockages de MDM.

Par exemple, MySQL peut être utilisé pour les données utilisateur, H2 pour les données en préparation et Oracle pour les objets système.

<datasources xmlns="http://www.talend.com/mdm/datasources">
    <datasource name="RDBMS-1">
        <master>
            <type>RDBMS</type>
            <rdbms-configuration>
                <dialect>MySQL</dialect>
                <connection-driver-class>com.mysql.jdbc.Driver</connection-driver-class>
                <connection-url>jdbc:mysql://localhost:3306/${container}</connection-url>
                <connection-username>root</connection-username>
                <connection-password>toor</connection-password>
                <fulltext-index-directory>/var/lucene/indexes/DS1</fulltext-index-directory>
                <init>
                    <connection-url>jdbc:mysql://localhost:3306/</connection-url>
                    <connection-username>root</connection-username>
                    <connection-password>toor</connection-password>
                    <database-name>${container}</database-name>
                </init>
             </rdbms-configuration>
        </master>
        <staging>
            <type>RDBMS</type>
            <rdbms-configuration>
                <dialect>H2</dialect>
                <connection-driver-class>org.h2.Driver</connection-driver-class>
                <connection-url>jdbc:h2:target/data/h2_staging_ds2;MVCC=true</connection-url>
                <schema-generation>create</schema-generation>
            </rdbms-configuration>
        </staging>
        <system>
            <type>RDBMS</type>
            <rdbms-configuration>
                <dialect>Oracle11g</dialect>
                <connection-driver-class>oracle.jdbc.driver.OracleDriver</connection-driver-class>
                <connection-url>jdbc:oracle:thin:@fakehost:1521:XE</connection-url>
                <connection-username>SYSTEM</connection-username>
                <connection-password>password</connection-password>
            </rdbms-configuration>
        </system>
    </datasource>
</datasources>

Configurations spécifiques des bases de données pour l'utilisation du stockage SQL de MDM

Comme MDM supporte différents types de bases de données, vous pouvez effectuer des configurations spécifiques pour chacun d'entre eux.

SQL Server 2008

Le serveur SQL 2008 peut rapidement rencontrer des problèmes simultanés avec des blocages lors d'insertions ou de mises à jour. Ce type de problèmes survient très rapidement et ne nécessite pas de chargement lourd.

Pour résoudre ce problème, vous devez configurer l'instance de votre SQL Server. Exécutez la requête SQL suivante :

ALTER DATABASE <database name>   SET READ_COMMITTED_SNAPSHOT ON
  WITH ROLLBACK IMMEDIATE;

Utilisation du stockage SQL de MDM

Procédure

  1. Assurez-vous que les configurations sont correctes en fonction de la base de données utilisée.
  2. Dans le studio MDM de Talend, déployez un modèle de données nommé Product.
    Le nom du conteneur de données doit être le même que celui du modèle de données. Pour initialiser un stockage SQL, les métadonnées de l'entité qu'il gère sont nécessaires, car le schéma de la base de données provient des entités. Actuellement, aucun mapping n'existe entre un conteneur de données et le(s) modèle(s) de données qu'il gère, par conséquent la convention de nommage doit être respectée.
  3. Créez un conteneur de données Product et déployez-le sur le serveur.
    Lorsque vous utilisez une version du studio ultérieure à la version 5.3, vous pouvez sélectionner le modèle de données et le conteneur de données dans le répertoire et les déployer sur le serveur. MDM réorganise les déploiements dans le bon ordre (le modèle de données en premier, puis le conteneur de données).