Les 14.000 premières signatures contre l’acquisition de MySQL par Oracle

janvier 4, 2010

Lancée il y a près d’une semaine, la pétition en ligne contre l’acquisition de MySQL par Oracle a réuni plus de 14000 signatures.

Ces signatures sont présentées aujourd’hui aux régulateurs de la commission européenne, au ministère chinois du commerce (MOFCOM), au service fédéral russe de lutte contre les monopoles (FAS) et auprès de la commission suisse.

La campagne désormais inscrite en 20 langues, rencontre un succès massif auprès des utilisateurs de MySQL. Un soutien déjà 50 fois supérieur à celui que Oracle annonçait il y a trois semaines.

Plus de 5000 signatures proviennent de développeurs indépendants et plus de 3000 concernent des utilisateurs en entreprises (http://www.helpmysql.org/en/stats)

Les organisateurs de la campagne indiquent que les livraisons suivantes de nouvelles signatures auront maintenant lieu une à deux fois par semaine. La pétition sera prochainement élargie pour être transmise aux autorités de la concurrence d’autres pays, en particulier Japon et Brésil.

Pour signer la pétition: http://www.helpmysql.org/fr/petition

Le site: http://www.helpmysql.org/fr/theissue/customerspaythebill

Autres liens sur dasini.net:

http://dasini.net/blog/2009/12/30/petition-pour-sauver-mysql/

http://dasini.net/blog/2009/12/14/we-are-using-mysql-help-save-it/

0

Pétition pour sauver MySQL

décembre 30, 2009
Tags: , ,

http://www.helpmysql.org/fr/petition

Une pétition pour assurer l’innovation future liée à MySQL et préserver MySQL comme une force compétitive importante

http://www.helpmysql.org/fr/petition

http://www.helpmysql.org/fr/theissue

0

We are using MySQL, help save it

décembre 14, 2009

Appel de Monty, pour sauver MySQL.http://monty-says.blogspot.com/2009/12/help-saving-mysql.html

I, Michael « Monty » Widenius, the creator of MySQL, is asking you urgently to help save MySQL from Oracle’s clutches. Without your immediate help Oracle might get to own MySQL any day now. By writing to the European Commission (EC) you can support this cause and help secure the future development of the product MySQL as an Open Source project.

What this text is about:
- Summary of what is happening
- What Oracle has not promised
- Oracles past behavior with Open Source
- Help spread this information (Jump to ‘What I want to ask you to do’)
- Example of email to send to the commission (Jump to ‘send this to:’)

I have spent the last 27 years creating and working on MySQL and I hope, together with my team of MySQL core developers, to work on it for many more years.

Oracle is trying to buy Sun, and since Sun bought MySQL last year, Oracle would then own MySQL. With your support, there is a good chance that the EC (from which Oracle needs approval) could prevent this from happening or demand Oracle to change the terms for MySQL or give other guarantees to the users. Without your support, it might not. The EC is our last big hope now because the US government approved the deal while Europe is still worried about the effects.

Instead of just working out this with the EC and agree on appropriate remedies to correct the situation, Oracle has instead contacted hundreds of their big customers and asked them to write to the EC and require unconditional acceptance of the deal. According to what I been told, Oracle has promised to the customers, among other things, that « they will put more money into MySQL development than what Sun did » and that « if they would ever abandon MYSQL, a fork will appear and take care of things ».

However just putting money into development is not proof that anything useful will ever be delivered or that MySQL will continue to be a competitive force in the market as it’s now.

As I already blogged before, a fork is not enough to keep MySQL alive for all future, if Oracle, as the copyright holder of MySQL, would at any point decide that they should kill MySQL or make parts of MySQL closed source.

Oracle claims that it would take good care of MySQL but let’s face the facts: Unlike ten years ago, when MySQL was mostly just used for the web, it has become very functional, scalable and credible. Now it’s used in many of the world’s largest companies and they use it for an increasing number of purposes. This not only scares but actually hurts Oracle every day. Oracle have to lower prices all the time to compete with MySQL when companies start new projects. Some companies even migrate existing projects from Oracle to MySQL to save money. Of course Oracle has a lot more features, but MySQL can already do a lot of things for which Oracle is often used and helps people save a lot of money. Over time MySQL can do to Oracle what the originally belittled Linux did to commercial Unix (roughly speaking).

So I just don’t buy it that Oracle will be a good home for MySQL. A weak MySQL is worth about one billion dollars per year to Oracle, maybe more. A strong MySQL could never generate enough income for Oracle that they would want to cannibalize their real cash cow. I don’t think any company has ever done anything like that. That’s why the EC is skeptic and formalized its objections about a month ago.

Richard Stallman agrees that it’s very important which company owns MySQL, that Oracle should not be allowed to buy it under present terms and that it can’t just be taken care of by a community of volunteers. http://keionline.org/ec-mysql

Oracle has NOT promised (as far as I know and certainly not in a legally binding manner):

- To keep (all of) MySQL under an open source license.
- Not to add closed source parts, modules or required tools.
- To keep the code for MySQL enterprise edition and MySQL community edition the same.
- To not raise MySQL license or MySQL support prices.
- To release new MySQL versions in a regular and timely manner. (*)
- To continue with dual licensing and always provide affordable commercial licenses to MySQL to those who needs them (to storage vendors and application vendors) or provide MySQL under a more permissive license
- To develop MySQL as an Open Source project
- To actively work with the community
- Apply submitted patches in a timely manner
- To not discriminate patches that make MySQL compete more with Oracles other products
- To ensure that MySQL is improved also in manners that make it compete even more with Oracles’ main offering.

From looking at how Oracle handled the InnoDB acquisition, I don’t have high hopes that Oracle will do the above right if not required to do so:

For InnoDB:
- Bug fixes where done (but this was done under a contractual obligation)
- New features, like compression that was announced before acquisition, took 3 years to implement
- No time tables or insight into development
- The community where not allowed to participate in development
- Patches from users (like Google) that would have increased performance was not implemented/released until after Oracle announced it was acquiring Sun.
- Oracle started working on InnoDB+, a better ‘closed source’ version of InnoDB
- In the end Sun had to fork InnoDB, just to be able to improve performance.

It’s true that development did continue, but this was more to be able to continue using InnoDB as a pressure on MySQL Ab.

Note that Oracle’s development on the Linux kernel is not comparable with MySQL, because:
- Oracle is using Linux as the main platform for their primary database product (and thus a better Linux makes Oracles platform better)
- The GPL code in the kernel is not affecting what is running on top on it (because of an exception in Linux).

Because we don’t have access to a database of MySQL customers and users the only way we can get the word out is to use the MySQL and Open Source community. I would never have resorted to this if Oracle would not have broken the established rules in anticompetitive merger cases and try to influence the EC by actively mobilising the customers.

This is very critical to this AS SOON AS POSSIBLE as EC, depending on what Oracle is doing, needs to make a decision either on Monday (2009-12-14) or within two weeks. Becasue of the strict deadline, every email counts!

What I want to ask you to do (until 2009-12-19):

- Forward this email to everyone that you know is using MySQL or Open Source/free software and to all email list where you know there are people present that use or care about MySQL and open source (please check first that this email hasn’t been sent there before)
- Alternatively send emails with information about this and tell them to read http://monty-says.blogspot.com/2009/12/help-saving-mysql.html
- Add links on your web site to http://monty-says.blogspot.com/2009/12/help-saving-mysql.html with the text « We are using MySQL, help save it », for the duration of the next two week.
- Blog about this (feel free to include this text or just link to my blog)
- Call by phone (don’t contact by email, this is urgent) your boss or VP and ask him to read this email and send a letter to the EC commission ASAP!
- If you don’t have anyone to contact above, send an email to the EC!

As we want the EC to get a correct picture of the situation, we want you to first fill in the upper part and then choose one of the proposed texts belowe that best matches your view of the situation. Feel free to supply your own text and additional information if you think this will help the EC to reach a better understanding of how MySQL is used.

Send this to: comp-merger-registry@ec.europa.eu
If you want to keep us updated, send a copy to ec@askmonty.org

If you have extra time to help, fill in the following, if not, just skip to the main text.

Name:
Title:
Company:
Size of company:
How many MySQL installations:
Total data stored in MySQL (megabyte):
For what type of applications is MySQL used:
Should this email be kept confidential by EC: Yes/No

Copy or use one of the below texts as a base for your answer:

a)
I don’t trust that Oracle will take good care of MySQL and MySQL should be divested to another company or foundation that have everything to gain by developing and promoting MySQL. One should also in the future be able to combine MySQL with closed source application (either by exceptions, a more permissive license or be able to dual license MySQL under favourable terms)

b)

I think that Oracle could be a good steward of MySQL, but I would need EC to have legally binding guarantees from Oracle that:
- All of MySQL will continue to be fully Open Source/free software in the future (no closed source modules).
- Open Source version and dual-licensed version of MySQL should have same source (like today).
- That development will be done in community friendly way.
- The manual should be released under a permissive license (so that one can fork it, the same way one can fork the server)
- That MySQL should be released under a more permissive license to ensure that forks can truly compete with Oracle if Oracle is not a good steward after all.
Alternatively:
- One should be able to always buy low priced commercial licenses for MySQL.
- All of the above should be perpetual and irrevocable.

There should also be mechanism so that if Oracle is not doing what is expected of it, forks should be able to compete with Oracle

c)
I trust Oracle and I suggest that EC will approve the deal unconditionally.

——————–

Let us prove to Oracle and EC that the Open Source community is a true force and we take good care of our citizens and we prefer to work with companies that does the same!

The future of MySQL is in your hands!

Thanks for the help!
Michael Widenius
Creator of MySQL

UPDATE: Oracle has made some public promises that only fixes this one issue marked with (*).

NOTE: Their promise to storage engines vendors is not future safe as it’s a time-limited non-assertion (they promise to not sue for 5 years), but they could still sue one for using a storage engine with old code after the 5 years. They limited the promise to the storage engine API but not to other plugin API:s that almost every pluggable storage engine uses. They clarify this, Oracle should change this to be a license exception for all plugins and it should be valid perpetual with the released code. It’s also unclear if this non-assertion is valid if the vendor makes extension to the interfaces (which most storage engines do).

http://monty-says.blogspot.com/2009/12/help-saving-mysql.html
Aux armes mysqlien
4

Audit et optimisation MySQL 5

novembre 9, 2009

Arnaud Gadal DBA MySQL à Virgin Mobile, Pascal Borghino architecte base de données à Yahoo! (mes potos de dbnewz) et moi, venons juste de terminer l’écriture d’un livre consacré à l’audit et à l’optimisation d’un serveur MySQL.
A travers cet ouvrage, nous avons essayé de synthétiser nos différentes expériences pour vous aider à tirer le meilleur de votre base de données. Dans le livre nous abordons des sujets comme les architectures de réplication, le tuning du serveur, les moteurs de stockage, les logs…
Audit & optimisation MySQL 5 est édité par eyrolles et devrait être disponible d’ici 4 à 6 semaines

à suivre…

5

Un dauphin qui obéit au doigt et à l’oeil ?

novembre 4, 2009

En cherchant des images pour ma prochaine conférence MySQL, pour le forum PHP/MySQL 2009, je suis tombé, tout à fait par harsard (je tiens à le préciser ;) ) sur ceci:

Dolphin Finger

Dolphin Finger

Finalement, c’est peu être un bon moyen d’augmenter la popularité de MySQL chez la gente féminine, cependant je n’arrive pas bien à voir où placer cette image dans ma présentation…

Rappel: Offre LeMug / forum PHP: http://dasini.net/blog/2009/10/20/conferences-mysql-au-forum-php/

2

Conférences MySQL au Forum PHP

octobre 20, 2009

Le MySQL User Group Francophone est partenaire avec l’AFUP du Forum PHP, qui se tient les 12 et 13 novembre 2009, à la Cité des Sciences et de l’Industrie.


Au programme des conférences dédiées à MySQL et MariaDB :

  • mysqlnd / « MySQL native driver for PHP » : Les améliorations de la stack avec Serge Frezefond
  • Au secours, ma base de données fait ramer mon application ! avec Stéphane Combaudon
  • MariaDB, the future of MySQL avec Michael Widenius aka Monty
  • Retour d’expérience sur l’utilisation de MySQL Chez Orange Business Services avec Olivier DASINI
  • Réplication MySQL : retours d’expérience avec Jean-François Bustarret

Participez à cet événement et bénéficiez d’une offre exceptionnelle :
les deux journées du Forum PHP
+
l’adhésion 2009/2010 au MySQL User Group France
pour 140 euros au lieu de 200 euros !*

Suivez ce lien pour adhérer au MUG et recevoir votre badge pour le Forum PHP

*Tarif normal de l’accès deux jours au Forum PHP 180 euros + Adhésion annuelle au MySQL User Group 20 euros.

0

MySQL Query cache

octobre 12, 2009
Tags:

En tant que boulimique de MySQL, je me promène souvent sur la toile à la recherche d’informations, de bonnes et de moins bonnes…

Je suis tombé sur un article traitant du cache de requêtes de MySQL (MySQL Query Cache) sur le blogue de Patrick Lafontaine (http://www.noidea.ca/)

Je me permet de faire quelques commentaires ici.

En préambule, quelques informations nécessaires sur le cache de requêtes:

Système de cache interne à MySQL qui ne stocke que les requêtes SELECT et leur résultat ie pas d’INSERT, UPDATE, DELETE…

Les requêtes ( SELECT donc) doivent être strictement identiques ie même casse, mêmes espaces entre les mots,…

Ex 3 requêtes différentes pour le cache :

SELECT nom, prenom FROM client WHERE client_id=123;
select nom, prenom FROM client WHERE client_id=123; /* la casse du select*/
SELECT nom, prenom FROM client        WHERE client_id=123; /*plusieurs espaces entre client et WHERE*/

Le cache est toujours à jour car en cas de modification d’une table, toutes les requêtes en relations avec cette table sont invalidées.

Le cache de requêtes est en général utile lorsque:

  • Les modifications sur les tables ne sont pas très fréquentes
  • Beaucoup de requêtes de lectures identiques
  • Utilisation de tables MyISAM. Moins intéressant pour InnoDB

Pour rebondir sur l’article de Patrick Lafontaine

« puisqu’elle est activée par défaut. »

Le cache de requêtes n’est pas activé par défaut, car la variable query_cache_size vaut 0. Si vous voulez vous en servir, il faut lui donner une taille en octet. Mettez le tout dans votre fichier de configuration. Assurez vous également que la variable query_cache_type est différente de OFF

« c’est-à-dire que la ou les applications qui s’en servent n’ont pas besoin d’être modifiées »

Pour une optimisation optimale, il est parfois nécessaire de modifier les requêtes SELECT avec SQL_CACHE ou SQL_NO_CACHE. On choisit alors quelles requêtes seront mis en cache.

« Si quelqu’un modifie la valeur directement dans MySQL, la cache possèdera la vieille valeur jusqu’à ce qu’un processus l’invalide. »

Sur une machine de production, ce type de manipulation reste quand même exceptionnel, sinon c’est qu’il y a des choses à revoir dans les process.

« Puisque les données ne changent pratiquement jamais, je ne me casserais pas la tête à réinventer la roue. MySQL fait déjà pour vous ce que APC ferait, sans le moindre effort. »

Si le contenu ne change JAMAIS, il n’a à priori rien à faire en base ! Il vaut mieux utiliser un menu statique et laisser la base faire son boulot avec du contenu dynamique. Dans le même ordre d’idée, plus le cache est éloigné du disque plus il est performant. En d’autres termes, le goulet d’étranglement est souvent (parfois) la base de données, de plus elle est souvent (parfois) plus difficilement scalable que le reste. L’utilisation d’un cache applicatif est rarement une mauvaise idée (il suffit de connaître l’identité du plus gros consommateur de memcached au monde http://www.facebook.com/note.php?note_id=39391378919)

« Il est donc plus avantageux de cacher les processus lourds que les légers. »

Malheureusement, avec le cache de requêtes ce n’est pas aussi simple. Admettons qu’une requête renvoyant un gros résultat prenne plus de temps qu’une renvoyant un plus petit. Si cette grosse requête vire toutes les autres requêtes du cache, l’apport du cache pour les autres requêtes est perdu, elle devront être misent à nouveau dans le cache ca qui implique des recherches inutiles dans le caches et de nouveaux accès disque…

« Lorsque la Query Cache de MySQL est activée, le processus de cacher les résultats et de les invalider s’effectue tout seul de manière invisible. Ainsi, d’autres requêtes que vous ne soupçonnez même pas bénéficient de la cache »

L’efficacité du cache de requêtes est vraiment lié à l’application. Il dépend du type de requêtes SELECT, de leur fréquence et de la fréquence des écritures dans les tables. Le gain n’est pas évident et est loin d’être immédiat, car pour chaque requête « cachable » MySQL devra l’analyser, devra la hacher, devra vérifier s’il elle est dans le cache ou non. Et ceci à un coût…

Vous pouvez calculer le taux d’efficacité du cache de requêtes avec la formule suivant:

Qcache_hits / (Qcache_hits + Com_select )

Pour finir, quelques paramètres et commandes

Paramètres principaux:

query_cache_size: Doit être différent de zéro pour activer le cache

query_cache_type:

  • ON: les requêtes select sont misent en cache

    • Sauf (SQL_NO_CACHE, result set trop grand, fonction non déterministe..)

  • DEMAND: SELECT SQL_CACHE

  • OFF

Commandes principales:

FLUSH QUERY CACHE

  • Défragmente le cache de requêtes

  • Ne vide pas le cache

Vider le cache de requêtes:

  • RESET QUERY CACHE

  • FLUSH TABLES

  • Redémarrer le serveur

Variables d’état: SHOW STATUS LIKE ‘Qcache%’ ;

Qcache_free_blocks : nombre de blocs libres

Qcache_free_memory : mémoire libre

Qcache_hits : nombre de fois qu’il a servi

Qcache_inserts : nombre de requêtes insérées

Qcache_lowmem_prunes : nombre de requêtes supprimées car plus de place

Qcache_not_cached : nombre de requêtes non « cachables »

Qcache_queries_in_cache : nombre de requêtes dans le cache

Qcache_total_blocks : nombre de blocs de mémoire

12

Utiliser XML avec MySQL 5.1 (part 5/5)

octobre 1, 2009

(<- précédent)

Jusqu’ici, la récupération des informations ne s’est opérée qu’en lisant un flux XML stocké dans une variable. Cependant, il est également possible de récupérer des informations XML stockées dans la base : il suffit pour cela de remplacer la variable par le nom du champs dans lequel est enregistré ce flux.

Comment trouver le type et les URL des flux RSS qui contiennent le mot France ?

Extraire les données d’un flux XML stocké en base

SELECT type, extractValue( flux_rss, « /rss/channel/item/link[ ../title[contains(.,'France')]] ») AS url FROM rss GROUP BY url HAVING url NOT LIKE  »\G
*************************** 1. row ***************************
type: international
url: http://www.lemonde.fr/asie-pacifique/article/2008/08/21/en-france-le-debat-s-intensifie-sur-le-renfort-des-troupes-en-afghanistan-decide-par-m-sarkozy_1086214_3216.html?xtor=RSS-3210
*************************** 2. row ***************************
type: technologie
url: http://www.lemonde.fr/aujourd-hui/article/2008/08/07/en-france-des-adversaires-des-jo-s-expriment-en-video-sur-la-toile_1081170_3238.html?xtor=RSS-651865

MySQL 5 implémente une autre commande pour pouvoir traiter des flux XML, la fonction updateXML(). Elle permet de modifier la sortie d’un document XML, sans modifier ce dernier.

Une remarque, cette fonction ne modifie que le premier nœud trouvé qui correspond à l’expression, ce qui limite son intérêt. De plus, la chaîne de remplacement est figée, il n’est donc pas possible de faire une transformation:

Remplacement de données XML avec updatexml

SELECT updatexml(load_file( ‘c:/formateur.xml’), ‘/opensource/formateur[2]/prenom’, ‘<prenom>aka XML fan</prenom>’) AS result \G
*************************** 1. row ***************************
result:
<opensource>
Les formateurs de l’équipe sont :
<formateur domaines= »MySQL PHP »>
<nom>Dasini</nom>
<prenom>Olivier</prenom>
</formateur>
<formateur domaines= »PHP XML »>
<nom>Allard</nom>
<prenom>Aka XML fan</prenom>
</formateur>
<formateur domaines= »Linux MySQL »>
<nom>Dumont</nom>
<prenom>Pierre</prenom>
</formateur>
et sont passionnés par l’open source.
</opensource>
/*Le fichier XML original n’est pas modifié*/

Conclusion

Voilà un petit panorama de l’utilisation des fonctionnalités XML de MySQL. Comme nous l’avons vu, générer le résultat d’une requête au format XML reste très simple avec le client texte mysql, idem pour la génération d’une sauvegarde (mysqldump). De plus, bien que n’étant pas un base de données XML, ont peut aisément y stocker des flux XML, et les parcourir ou les modifier grâce aux fonctions extractValue et updatexml, et une bonne dose d’XPath. Le support de ce dernier, par MySQL, reste encore assez basique, mais ce manque sera comblé progressivement dans les prochaines versions.

Article co-écrit avec Fabien Allard qui est formateur et développeur certifié PHP, Ajax et Linux chez Anaska Alter Way Group. Fabien est également spécialiste des technologies XML.

(Début de l’article)

0

La 9ème édition du Forum PHP dans les starting-blocks

septembre 28, 2009
Tags: , ,

logo ARTICLE 390

L’édition 2009 du rendez-vous incontournable des utilisateurs PHP en France s’installe à la Cité des Sciences de La Villette, les 12 et 13 novembre 2009.
Une édition qui mettra à l’honneur le couple PHP/MySQL, avec un invité de marque, pour la 1ère fois en France : Michael « Monty » Widenius.
L’événement estampillé AFUP (Association Française des Utilisateurs de PHP) réunira durant 2 jours quelques grands experts internationaux du monde PHP, qui viendront échanger autour des problématiques phares du langage open source. L’occasion de faire le point sur les évolutions fonctionnelle et technique, communautaire et entreprise de PHP.

Cette 9ème édition sera axée sur le couple PHP/MySQL, avec 8 conférences dédiées. LEMUG.fr, l’association francophone des utilisateurs de MySQL et partenaire de l’événement animera 3 conférences.

Le Forum PHP accueillera en exclusivité et pour la première fois en France, Michael « Monty » Widenius, le créateur de MySQL. Suite au rachat de MySQL AB dont il était le co-fondateur, Monty a créé l’Open Database Alliance, un consortium et un lieu d’échanges pour tous les acteurs de l’écosystème de la base de données. Par ailleurs il fonde Monty Program ab, et poursuit le développement de MariaDB. A ce titre Monty présentera une conférence intitulée : « MariaDB the future of MySQL ».

Le PHP se décline au féminin avec la participation de : Zoe Slattery, PHP Women. Zoe a œuvré pour le compte d’IBM pendant 20 ans. En 2007, elle s’implique dans la promotion de PHP et développe des phases de tests. Anna Filina, PHP Québec, animera une conférence dédiée aux décideurs sur l’analyse des comportements des développeurs.

Reconnu mondialement comme une alternative de choix aux langages de programmation .Net ou J2EE, PHP est aujourd’hui une technologie mature qui entre dans une phase d’industrialisation. Largement adopté dans le monde de l’entreprise, PHP est un élément clé des infrastructures Web.

L’édition 2009 sera l’opportunité d’aborder l’industrialisation, la professionnalisation et la maturation du langage PHP avec une formule qui fait son succès chaque année : des conférences animées par les meilleurs experts internationaux des retours d’expérience issus des grands comptes des ateliers pratiques

… :: FOCUS PROGRAMME – À NE PAS MANQUER ::…

Conférences

« MariaDB the future of MySQL » – Michael « Monty » Widenius, le père de MySQL « Oui, PHP est industriel ! » – Damien Seguy, Alter Way Consulting Conférences LEMUG.FR : Stéphane Varoqui consultant MySQL; Serge Frezefond, Directeur technique MySQL France, Sun Microsystems ; Olivier Dasini, Retour d’epérience de  MySQL à Orange Business Service. « Jouons avec PHP 5.3 » – Fabien Potencier, créateur du framework PHP Symfony et Co-fondateur de Sensio Labs. « PHP and MySQL : a good match » – Johannes Schlüter, Sun Microsystems. Johannes est responsable de la publication de la version 5.3 de PHP, Julien Pauli, architecte certifié PHP et ZendFramework chez Anaska Alter-Way Formation

Témoignages utilisateurs

Réplication MySQL, WAT TV Migration de J2EE vers PHP, M6 Web Ultimedia et Jukebo 2.0, Digiteka Retour d’expérience, Orange

A propos de l’AFUP L’Association Française des Utilisateurs de PHP (AFUP), est une association dont le principal but est de promouvoir le PHP auprès des professionnels et de participer à son développement.

Contact : bureau@afup.org

En savoir plus : http://afup.org/pages/forumphp2009/

Inscription: http://afup.org/pages/forumphp2009/inscription.php

Conférenciers: http://afup.org/pages/forumphp2009/conferenciers.php

0

Utiliser XML avec MySQL 5.1 (part 4/5)

septembre 16, 2009
Tags: ,

(<- précédent)

Les fonctionnalités XPath de MySQL 5

MySQL 5 offre la possibilité de pouvoir exécuter des requêtes XPath sur un flux XML, grâce à la fonction extractValue().

Le résultat récupéré est la concaténation de la valeur textuelle de chacun des nœuds trouvés (chaque valeur étant dissociée des autres par un espace blanc).

Comment récupérer la valeur de l’élément racine d’un flux XML ?

Extraire des données d’une variable contenant du XML

/*Contenu du fichier XML */

shell> cat formateur.xml
<opensource>
Les formateurs de l'équipe sont :
<formateur domaines="MySQL PHP">
<nom>Dasini</nom>
<prenom>Olivier</prenom>
</formateur>
<formateur domaines="PHP XML">
<nom>Allard</nom>
<prenom>Fabien</prenom>
</formateur>
<formateur domaines="Linux MySQL">
<nom>Dumont</nom>
<prenom>Pierre</prenom>
</formateur>
et sont passionnés par l'open source.
</opensource>

/* Initialisation de la variable @xml avec le contenu du fichier formateur.xml */

mysql> SET @xml = LOAD_FILE( './formateur .xml');

/* Récupération de la valeur de l’élément racine */

mysql> SELECT extractValue( @xml, '/opensource')\G
*************************** 1. row ***************************
extractValue( @xml, '/opensource'):

Les formateurs de l’équipe sont :

et sont passionnés par l’open source.

Comme vous pouvez le constater les éléments enfants de l’élément racine sont supprimés de la sélection : seul le contenu propre des éléments recherchés est donc intégré au résultat.

Autre exemple, on veut sélectionner le deuxième formateur de notre flux XML, ainsi que les formateurs qui ont pour domaine de compétence MySQL:

Extraire le deuxième formateur et les formateurs MySQL

mysql> SELECT extractValue( @xml, ‘/opensource/formateur[2]/nom’) AS Deuxieme, extractValue( @xml, ‘/opensource/formateur[contains( @domaines, "MySQL")]/nom’) AS MySQL;
+———-+—————+
| Deuxieme | MySQL |
+———-+—————+
| Allard | Dasini Dumont |
+———-+—————+

Comme vous avez pu le constater, XPath est également un langage d’interrogation. Examinons d’un peu plus près sa syntaxe.

Une expression XPath représente ce qui est appelé un chemin de localisation (très similaire au chemin permettant d’identifier un fichier) dans lequel chaque nœud est séparé des autres avec un /.

Généralement, la recherche s’effectue en fonction de deux types de nœuds distincts :

  • les nœuds éléments, renseignés par leur nom,

  • les attributs, indiqués par un @ accolé à leur nom.

Ainsi l’expression formateur/@domaines réfère l’attribut appelé domaines des éléments nommés formateur.

Pour pouvoir filtrer plus finement les éléments, XPath dispose des prédicats.

Chacun de ces prédicats est spécifié dans une paire de crochets [expression].

Une expression peut être soit une simple évaluation, soit utiliser une (ou plusieurs) fonction(s).

Par exemple formateur[@domaines="Linux MySQL"][contains( nom, "Dumont")]/prenom retrouve tous les prénoms des formateurs qui ont pour domaines Linux MySQL et qui possèdent un nom valant Dumont.

Les chemins de localisation utilisés peuvent être indiqués de façon absolue ou de façon relative. Dans ce deuxième cas, la recherche s’effectue en fonction du nœud contexte.

Dans l’expression précédente, l’attribut domaines testé est celui de l’élément formateur.

Enfin, il est possible de se déplacer dans l’arborescence (un . représente le nœud courant, et .. le nœud parent).

Ainsi formateur/prenom[../@domaines="Linux MySQL"][contains( ../nom, "Dumont")] est équivalente à l’expression précédente.

(à suivre… utiliser XML avec MySQL 5.1 : Extraire les données d’un flux XML stocké en base)

0