1. MediaWiki et Informix
Franck THOMAS
franck.thomas@consult-ix.fr
Lundi 4 avril 2011
User Group Informix France
2. AGENDA
Présentation et origine de MediaWiki
Comment installer MediaWiki avec Informix ?
Présentation de la base de données MediaWiki : propriétés, statistisques etc.
CLOB : usage dans MediaWiki
Module BasicTextSearch : Configuration et usage dans MediaWiki
Portage de MediaWiki vers Informix
Exemple d’utilisation et cas d’utilisation chez ConsultiX
Critiques et limitation de MediaWiki
Optimisations Informix possibles sur la base de données
User Group Informix France
3. Présentation de MediaWiki
Logiciel libre développé à l'origine pour
Wikipédia
Utilisé pour d’autres sites de l'association à
but non lucratif Wikimedia Foundation
Sous license GNU General Public License
(GPL).
User Group Informix France
4. Origine de MediaWiki
Wiki : mot hawaïen signifiant rapide
WikiWikiWeb est le 1er wiki, inventé en
1994 par Ward Cunningham pour son
site Web : http://c2.com/cgi/wiki
User Group Informix France
5. Propriétés d’un site Wiki
Pages contenant des hyperliens pointant les unes
vers les autres
Pages modifiables par les visiteurs (identifiés ou
non) avec un simple navigateur Web
Ecriture collaborative
Illustration collaborative
Historique et suivi des pages modifiées facilement
disponibles
User Group Informix France
6. Installer MediaWiki
Télécharger MediaWiki 1.15.x
Télécharger ensuite le package développé
par l’équipe de Jacques Roy sur le site IIUG :
http://www.iiug.org/opensource
Suivre les instructions du fichier README de
l’équipe de Jacques Roy
Remarque : Fonctionne avec PDO IBM mais
aussi avec PDO Informix
User Group Informix France
7. Propriétés de la base de données
Base journalisée
Création d’un smart blob space nécessaire pour
stocker des données CLOB
Module Basic Text Search à mettre en place pour le
module de recherche du site wiki
Création d’un smartblobspace ou d’un extspace pour
stocker les index du Basic Text Search
User Group Informix France
8. Base de données- Statistiques
Nombre de tables : 48
Nombre de fonctions externes C : 72
Nombre de fonctions internes : 1
Nombre
CHAR 25
INTEGER 93
DATETIME 20
VARCHAR 97
Variable-length opaque type 9
CLOB 18
SERIAL 12
SMALLINT 28
FLOAT 1
SERIAL8 2
BIGINT 1
User Group Informix France
9. Base de données
Basic Text Search
MédiaWiki
User Group Informix France
10. Base de données – Tables principales
Table page : contient la liste des titres des pages créées dans
le site (indexés par le BTS)
Table pagecontent : contenu d’une page créée dans le site
(indexé par le BTS)
Table externallinks: Table des liens externes contenus dans
une page vers d’autres sites.
Table pagelinks : Table des liens internes contenus dans une
page du site vers d’autres pages du site
Table image : contient la liste des images et autres fichiers
uploadés sur le site Wiki.
User Group Informix France
11. Base de données – Tables principales
Table mwuser : contient la liste des comptes utilisateurs du site
Table user_groups : contient le profil d’un login
(administrateur, bureaucrate, utilisateur …)
User Group Informix France
12. Que stocke un CLOB?
Rappel :
Un CLOB stocke des données texte ASCII, dont du
texte formaté comme :
– PostScript,
– Hypertext Markup Language (HTML),
– Standard Graphic Markup Language (SGML),
– Extensible Markup Language (XML).
Les champs de type CLOB doivent être stockés dans
des smartblobspaces
User Group Informix France
13. Que stocke les CLOB de MediaWiki ?
Le contenu des page créées (table pagecontent)
Le contenu des pages archivées (table archive) suite
à leur suppression du site
Les liens externes (table externallinks)
Les méta-données sur les images du site (table
image)
Les formules mathématiques (table math)
Les journaux des modifications (table logging)
Les options utilisateurs (table mw_user)
…
User Group Informix France
14. Que stocke les CLOB de MediaWiki ?
Données stockées
dans un CLOB
User Group Informix France
15. Basic Text Search
Rappel :
Recherche des mots et des phrases dans un
référentiel de document non structuré stocké dans
une colonne de table.
Utilise le composant de recherche textuelle open
source CLucene.
Extraction rapide des données textuelles
Indexation automatique des données textuelles.
User Group Informix France
16. Comment est utilisé le Basic Text Search
dans la base de données MediaWiki ?
Création d’un smartblobspace ou d’un extspace pour stocker les index
du Basic Text Search
Création d’un processus virtuel de la classe BTS:
– Modification du fichier ONCONFIG
Ou
– Ajout dynamique du processus virtuel BTS avec la commande onmode
Enregistrement pour la base de données MediaWiki du BTS avec le
blademanager (ou la fonction SysBldPrepare)
Création de 2 index BTS sur :
– Les titres des pages Web (stockés dans une colonne varchar de
255 caractères)
– Le contenu des pages Web (stockés dans une colonne CLOB)
User Group Informix France
17. Comment est utilisé le Basic Text Search
dans le code PHP de MediaWiki ?
Création de la classe PHP SearchIDS héritant de la
classe mère SearchEngine de MediaWiki
Appel au prédicat de recherche bts_contains() dans
la classe PHP SearchIDS
User Group Informix France
18. Comment est utilisé le Basic Text Search ?
class SearchIDS extends SearchEngine {
var $strictMatching = true;
function __construct($db) {
$this->db = $db;
}
/**
* Perform a full text search query and return a result set.
*/
function searchText( $term ) {
$resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
return new IDSSearchResultSet( $resultSet, $this->searchTerms );
}
…
function parseQuery( $filteredText, $fulltext ) {
global $wgContLang;
$lc = SearchEngine::legalSearchChars(); // Minus format chars
$searchon = '';
$this->searchTerms = array();
$m = array();
if( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(*?)|"[^"]*")/',
…….
$searchon = $this->db->strencode( $searchon );
$field = $this->getIndexField( $fulltext );
return " bts_contains($field, '$searchon') ";
}
User Group Informix France
19. Exemple de recherche avec le BTS
Recherche dans l’index
BTS sur les titres de page
Recherche dans l’index
BTS sur le contenu des
pages
User Group Informix France
20. Rappel sur les rectrictions du BTS
Configuration minimale requise : IBM Informix Dynamic Server,
Version, 11.10.
Langues idéographiques non prises en charge. Exemple : le chinois, le
coréen et le japonais.
Requêtes réparties et distribuées d’une instance à une autre non
prises en charge.
La parallélisation des requêtes n’est pas prise en charge
(PDQPRIORITY).
Vous devez stocker les données textuelles dans une colonne de
données de type BLOB, CHAR, CLOB, LVARCHAR, NCHAR,
NVARCHAR, ou VARCHAR.
User Group Informix France
21. Portage vers Informix
Création des classes PHP pour la gestion de la base de données :
– DatabaseIDS dérivant de la classe MediaWiki Database
– IDSResultWrapper pour la gestion de la base de données par la classe
DatabaseIDS
– IDSField pour la gestion des champs Informix des tables
Création des classes PHP suivantes pour le moteur de recherche et le
BTS :
– SearchIDS héritant de la classe MediaWiki SearchEngine
– IDSSearchResultSet pour la gestion des résultats de recherche
Adaptation de la classe AutoLoader pour charger les bonnes classes
PHP pour la gestion d’IDS et du BTS à l’exécution
User Group Informix France
22. Portage vers Informix
Adaptation Informix des requêtes SQL écrites en MySQL dans les
classes PHP suivantes :
– Category
– SpecialAncientpages
– SpecialDisambiguations
– SpecialNewimages
– SpecialUnusedimages
User Group Informix France
23. Portage vers Informix
Exemple : la classe PHP IDSFields
<?php
/**
* This is the IDS database abstraction layer.
*
* @package MediaWiki
*/
class IDSFields {
private $name, $tablename, $default, $max_length, $nullable, $type;
private $is_pk, $is_unique, $is_multiple, $is_key;
/* From the ESQL/C manual tables 3-3 and 3-4 */
private $alltypes = array(
"char", "smallint", "integer", "float", "smallfloat",
"decimal", "serial", "date", "money", "null", "datetime",
"byte", "text", "varchar", "internal", "nchar", "nvarchar",
"int8", "serial8", "set", "multiset", "list", "unnamed row",
"collection");
Etc.
User Group Informix France
24. Portage vers Informix
Adaptation du programme AutoLoader.php
<?php
/* This defines autoloading handler for whole MediaWiki framework */
ini_set('unserialize_callback_func', '__autoload' );
# Locations of core classes
# Extension classes are specified with $wgAutoloadClasses
# This array is a global instead of a static member of AutoLoader to work around a bug in APC
global $wgAutoloadLocalClasses;
$wgAutoloadLocalClasses = array(
# Includes
'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
'AjaxResponse' => 'includes/AjaxResponse.php',
'AlphabeticPager' => 'includes/Pager.php',
'APCBagOStuff' => 'includes/BagOStuff.php',
(…)
'IDSSearchResultSet' => 'includes/SearchIDS.php',
'SearchIDS' => 'includes/SearchIDS.php',
# includes/db
'Blob' => 'includes/db/Database.php',
'ChronologyProtector' => 'includes/db/LBFactory.php',
'Database' => 'includes/db/Database.php',
'DatabaseIDS' => 'includes/db/DatabaseIDS.php',
'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
'DatabaseMysql' => 'includes/db/Database.php',
'DatabaseOracle' => 'includes/db/DatabaseOracle.php‘
(…)
'IDSSearchResultSet' => 'includes/SearchIDS.php',
User Group Informix France
25. Exemples d’utilisation chez ConsultiX
Fiche projet de nos clients
– Description du projet
– Localisation des sources d’un projet et des livrables
– Liste des documents liés au projet
– Procédure à suivre pour la compilation des sources
– …
Procédures techniques internes :
– Sauvegarde d’instance Informix
– Sauvegarde des données de chaque ordinateur
– …
Fiche technique de nos serveurs:
– Distribution Unix installé
– N°de version linux utilisé
– Liste des produits installés
– …
Modèles de document accessibles à tous les membres de l’équipe de ConsultiX
User Group Informix France
30. Critiques et limitation de MediaWiki
Nécessité d’apprendre la syntaxe wiki pour éditer
une page, des liens, ajouter une image dans une
page …
L’édition d’une page n’est pas WYSIWYG
Impossibilité d’utiliser ontape ou onbar pour
sauvegarder les fichiers images et les documents
(Word, PDF, Excel …) uploadés sur le site wiki. En
effet, Les images et les documents uploadés sont
stockés sur le disque dur du serveur hébergeant le
site et non dans la base de données.
User Group Informix France
31. Optimisations Informix possibles
Création d’un dbspace dédié aux index séparément
du dbspace des données
Ajout d’un smartblospace temporaire pour la gestion
des données temporaires du BTS
Définir les extent size des tables de MediaWiki
Pour les champs VARCHAR, prévoir une taille
minimale par défaut
User Group Informix France
32. Questions - Merci
Franck Thomas
franck.thomas@consult-ix.fr
Lundi 4 avril 2011
User Group Informix France