Stockage SQL de MDM
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 concernant 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.
Principes de fonctionnement du stockage SQL de MDM
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·rice 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 concernant Hibernate, consultez http://www.hibernate.org/ (en anglais).
Configurations courantes pour l'utilisation du stockage SQL de MDM
Procédure
Utilisation de variables dans le fichier de 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://127.0.0.1:3306/${container}</connection-url>
<database-name>${container}</database-name>
<init>
<database-name>${container}</database-name>
<connection-url>jdbc:mysql://127.0.0.1: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}.
Lorsque vous utilisez des variables dans le fichier de configuration de la source de données,
- pour Oracle, une base de données avec différents schémas est créée pour les tables master, staging et system et toutes les tables pour les différents conteneurs sont créées dans le schéma correspondant. La table ne peut être supprimée lors du retrait du serveur du conteneur correspondant.
- pour les autres types de bases de données, une base de données est créée pour chaque conteneur. La base de données peut être supprimée automatiquement lors du retrait du serveur du conteneur correspondant.
Vous pouvez récupérer le fichier de configuration datasources.xml dans l'onglet Téléchargements de cette page pour consulter plus d'exemples d'utilisation des variables, pour différents types de bases de données.
Utilisation de plusieurs vendeurs de bases de données dans le fichier de configuration des sources de données
Par exemple, MySQL peut être utilisé pour les données utilisateur·rice, 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
Serveur SQL 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 serveur SQL. Exécutez la requête SQL suivante :
ALTER DATABASE <database name> SET READ_COMMITTED_SNAPSHOT ON
WITH ROLLBACK IMMEDIATE;