Tags:
create new tag
, view all tags

Implémentation de OGSA-DAI

Intervenants : Laurent Miguel, André Schaaff

Interlocutrice côté Edimbourg : Amy Krause

Le but de ce travail est d'implémenter la dernière version (Jersey) de OGSA-DAI pour :

  • acquérir une connaissance de l'utilisation des côtés serveur et client
  • réfléchir aux tests potentiels dans le cadre du CDS
  • apporter par la suite un support à nos collègues d'Edimbourg s'ils souhaitent accéder les services du CDS (via TAP par exemple) dans leur propre implémentation de OGSA-DAI

Première étape

  • lire les documents en ligne
  • télécharger la dernière version proposée par Amy
  • répondre à un certain nombre de questions : quel type de serveur ?, SOAP via axis ou la version REST est-elle opérationnelle, paramétrage de l'accès aux différentes sources de données (de différents types : XML, CSV, SGBD, etc.)
  • comment se font les requêtes ? SQL ?
  • utiliser les bonnes versions des outils (tomcat, axis, ant, etc.)
  • familiarisation de Laurent avec la spécification TAP pour la 2ème étape
  • etc.

"lire les documents en ligne"

N.B. entre la fin juin et le début du projet la documentation en ligne a été remaniée, des présentations et des explications simples qui paraissaient intéressantes ne sont plus présentes

la documentation est plutôt orientée vers des initiées et il y a beaucoup de partie qui ne sont pas très claires pour quelqu'un qui ne suit pas le projets de près ou qui débute

javadoc d'ogsadai : http://ogsa-dai.sourceforge.net/documentation/ogsadai4.2/ogsadai4.2-jersey-javadoc/

c'est très utile car des exemples sont présents, à contrario de la doc (ex : http://ogsa-dai.sourceforge.net/documentation/ogsadai4.2/ogsadai4.2-jersey-javadoc/uk/org/ogsadai/client/toolkit/example/XMLDBClient.html)

le fait que des exemples manquent dans la doc 4.2 nous oblige à consulter la javadoc ou alors une doc précédente

Quels types de "bases" de données ?

Ce sont principalement les SGBD qui sont concernés, la partie concernant des bases XML ne semblent pas vraiment maintenu (confirmé par Amy : There wasn't much demand for XML databases so this hasn't been updated in years as we focused on the relational databases and DQP). Au niveau SGBD il y a des exemples avec MySQL et pour XML il s'agit de eXist. L'exemple concernant MySQL est assez facile à mettre en oeuvre par contre la documentation n'est pas très claire pour la mise en œuvre de XML.

Comment se font les requêtes ?

On peut créer des requêtes sur un SGBD (ce qui semble un minimum...) mais également des requêtes concernants plusieurs SGBD (on peut faire ici un parallèle avec le logiciel Le Select que nous avions vu durant le projet PADOUE)

le chapitre http://ogsa-dai.sourceforge.net/documentation/ogsadai4.2/ogsadai4.2-jersey/DQPOverview.html explique comment effectuer une requêtes sur 2 ressources différentes

exemple :

SELECT regionType, avg(age) as avgAge
FROM 
  ((SELECT age, postcode FROM MySurvey_People) UNION ALL 
   (SELECT age, postcode FROM JoesSurvey_People)) as u
  JOIN PostcodeStats_PostcodeRegionType r ON u.postcode = r.postcode
GROUP BY regionType

Pas d'exemple java DQP alors qu'il y'en a un pour le mysql.

Client java XML ne marche pas (Class org.exist.xmldb.DatabaseImpl does not implement interface org.xmldb.api.base.Database ) Il faut chercher les classes nécessaires dans des versions différentes (notamment ogsadai 3) -> à mettre en rapport avec la réponse d'Amy précisant que la partie XML a en quelque sorte à l'abandon

Test de performance lors de requêtes SQL SIMPLES

Données de test : Employee Data

Jeu de données d'une taille totale de 160MO 

Disponible à cette url : http://dev.mysql.com/doc/index-other.html 

Tables utilisées : Employees ( 300 000 entrées ) et Salaries ( 2 844 000 entrées )

Nous allons mesurer le temps que met une requête SQL à s'effectuer via Ogsadai 4.2 Jersey et le comparer au temps d'execution de la même requête via Phpmyadmin. 

La base SQL est située localement.

Activités utilisées sur Ogsadai pour ces requêtes : 

            pipeline.add(query); 
            pipeline.add(tupleToByteArrays); 
            pipeline.add(deliverToRequestStatus);


Requête 1 : SELECT * FROM employees WHERE emp_no BETWEEN 10000 AND 40000
Nombre de résultats : 30000 
Temps d'éxecution mesuré sur Ogsadai : 5 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.0284 secondes

Requête 2 : SELECT * FROM employees WHERE emp_no BETWEEN 10000 AND 80000
Nombre de résultats : 70000 
Temps d'éxecution mesuré sur Ogsadai : 9.8 secondes
Temps d'éxecution mesuré sur Phpmyadmin : en test

Requête 3 ( Average + Jointure ): SELECT avg(salary) FROM `employees`, salaries WHERE employees.emp_no = salaries.emp_no AND salaries.emp_no BETWEEN 10000 AND 40000
Nombre de résultats : 1 ( average sur 284 000 salaires )
Temps d'éxecution mesuré sur Ogsadai : 1.5 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.1 secondes

Requête 4 ( SUM + Jointure ): SELECT sum(salary) FROM `salaries` , employees WHERE salaries.emp_no BETWEEN 10000 AND 40000 AND employees.emp_no = salaries.emp_no AND employees.gender = 'M'
Nombre de résultats : 1 ( SUM sur 170 000 salaires )
Temps d'éxecution mesuré sur Ogsadai : 1.3 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.064 secondes

Requête 5 ( SUM + AVG + SQRT + COUNT + MIN/MAX Jointure ): SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary),SUM(salaries.emp_no),
AVG(salaries.emp_no),MIN(salaries.emp_no),MAX(salaries.emp_no),COUNT(salaries.emp_no), SQRT(salaries.emp_no), SQRT(salary) FROM `salaries` , employees WHERE employees.emp_no BETWEEN 10000 AND 300003 AND employees.emp_no = salaries.emp_no
Nombre de résultats : 1 ( Opérations sur 1 800 000 salaires et 290 000 employés )
Temps d'éxecution mesuré sur Ogsadai : 2.66 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 1.12 secondes


Requête 6 ( SUM + AVG + SQRT + COUNT + MIN/MAX Jointure ): SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary),SUM(salaries.emp_no),
AVG(salaries.emp_no),MIN(salaries.emp_no),MAX(salaries.emp_no),COUNT(salaries.emp_no), SQRT(salaries.emp_no), SQRT(salary) FROM `salaries` , employees WHERE employees.emp_no BETWEEN 10000 AND 170003 AND employees.emp_no = salaries.emp_no
Nombre de résultats : 1 ( Opérations sur 950 000 salaires et 290 000 employés )
Temps d'éxecution mesuré sur Ogsadai : 1.94 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.59 secondes

Requête 7 ( SUM + AVG + SQRT + COUNT + MIN/MAX Jointure): SELECT SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary),SUM(salaries.emp_no),
AVG(salaries.emp_no),MIN(salaries.emp_no),MAX(salaries.emp_no),COUNT(salaries.emp_no), SQRT(salaries.emp_no), SQRT(salary) FROM `salaries` , employees WHERE employees.emp_no BETWEEN 10000 AND 80003 AND employees.emp_no = salaries.emp_no
Nombre de résultats : 1 ( Opérations sur 660 000 salaires et 290 000 employés )
Temps d'éxecution mesuré sur Ogsadai : 1.7 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.41 secondes

Les résultats de ces requêtes montrent qu'il y'a un temps de "voyage" minimum sur Ogsadai, d'environ 1.3 secondes lors des requêtes à faible nombre de résultats ( fonction de calculs SQL ) mais qui augmente selon la quantité de résultats retournée. 
On peut supposer que la transformation de ces résultats vers un tableau java peut prendre plus de temps, puisque le client java va interroger le service ogsadai qui lui va interroger la base SQL, il y'a donc des étapes en plus que via Phpmyadmin, ce qui peut expliquer un temps de requête plus long.

Test de performance lors de requêtes SQL DQP



Requête 1-b ( Equivalente à deux fois la requête 1 ) : SELECT * FROM ((select * from MySQLResource_employees c ) UNION ALL (select * from MySQLResource2_employees r  ) ) sub WHERE emp_no >= 10000 and emp_no < 40001
Nombre de résultats : 60000 
Temps d'éxecution mesuré sur Ogsadai en requête simple ( *2 ) : 10 secondes
Temps d'éxecution mesuré sur Ogsadai en requête DQP : 5.8 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.05 secondes

Requête 3-b ( Average + Jointure ): SELECT  avg(salary) FROM ((select * from MySQLResource_employees c ) UNION ALL (select * from MySQLResource2_employees r ) ) as u JOIN MySQLResource2_salaries w ON u.emp_no = w.emp_no WHERE w.emp_no >= 10000 and w.emp_no < 40001
Nombre de résultats : 1 ( average sur 568 000 salaires )
Temps d'éxecution mesuré sur Ogsadai en requête simple ( *2 ) : 3 secondes
Temps d'éxecution mesuré sur Ogsadai en requête DQP : 3.6 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 0.2 secondes

Requête 5-b ( SUM + AVG + COUNT + MIN/MAX Jointure SANS SQRT (non supporté) ): SELECT  SUM(salary),AVG(salary),MIN(salary),MAX(salary),COUNT(salary),SUM(u.emp_no), AVG(u.emp_no),MIN(u.emp_no),MAX(u.emp_no),COUNT(u.emp_no) FROM ((select * from MySQLResource_employees c ) UNION ALL (select * from MySQLResource2_employees r ) ) as u JOIN MySQLResource2_salaries w ON u.emp_no = w.emp_no WHERE w.emp_no >= 10000 and w.emp_no < 300005
Nombre de résultats : 1 ( Opérations sur 3 600 000 salaires et 580 000 employés )
Temps d'éxecution mesuré sur Ogsadai en requête simple ( *2 ) : 4.4 secondes
Temps d'éxecution mesuré sur Ogsadai en requête DQP : 16.5 secondes
Temps d'éxecution mesuré sur Phpmyadmin : 1.0 secondes

Requête lourde ( 4 Millions de résultats ): SELECT * FROM MySQLResource_employees, MySQLResource2_salaries
Temps d'éxecution mesuré sur Ogsadai en requête DQP : Infini ( plantage ), le server consomme plus de 1.8 go de mémoire et freeze, sans relâcher la mémoire.

Lors de l'éxecution des requêtes, des problèmes de mémoires sont apparus, la mémoire utilisée n'était pas totalement relâchée après l'éxecution de la requête, celà peut être un problème au niveau d'Ogsadai mais aussi du client java utilisé pour ces tests, ce dernier étant sommaire. Au final, les résultats sont variables, la requête DQP est plus rapide sur un Select * mais plus lente lors de requêtes qui utilisent des fonctions de calculs ( Min/max, average, count, ect ). Le test n'a pas pu être réalisé sur un grand nombre de résultats puisque le serveur plantait suite à un manque de mémoire vive. 

Documents utilisés en plus de la doc

Documents DQP http://www.cs.man.ac.uk/~norm/papers/fgcs09.pdf - http://www.dma.unina.it/~murli/ISSGC06/ogsadai/public_html/Slides/OGSA-DQP.pdf

Problèmes (de fond) au niveau de la documentation (extrait)

Chapter 54. How to add JARs to the server : after "The server's JAR files are located in:" then nothing

Chapter 55. How to configure the server URL : after "The server's context configuration file is located in:" then nothing

Chapter 56. How to add objects to the OGSA-DAI context : after "The server's context configuration file is located in:" then nothing

Chapter 58. How to use the OGSA-DAI request monitor  : after "The server's context configuration file is located in:" then nothing and after " You can then use it as follows:"  and "First visit the OGSA-DAI JSP index page in a browser (this was already deployed when you deploy OGSA-DAI) e.g:"  and "Visit the OGSA-DAI request monitor JSP page in a browser (this was already deployed when you deploy OGSA-DAI) e.g:" screens missing ?

Chapter 59. How to use the OGSA-DAI activity progress monitor : after " The server's context configuration file is located in:" then nothing

60.3. How to change the data source servlet name : "You can change the name of the servlet by changing the value in the url-pattern field. For example, changing the url-pattern value to be to be servlets/DataSourceRetrievalServlet would mean that the connection URL would be:" then nothing

61.2. Default REST servlet URL : after "If using the WriteToWebServerFile activity then the REST servlet URLs will have form:" then nothing

Chapter 64. How to specify a login provider : after "The server's context configuration file is located in:" then nothing

Appendix A. Appendix - OGSA-DAI server configuration files (a lot of locations are missing)

from chapter 67 to chapter 75 + chapters 78 and 79( all the examples are missing)

Problèmes au niveau de l'installation d'ogsadai Jersey 4.2

Lors de la création du client Mysql Java, il faut importer une classe de la version Axis non présente dans la version Jersey ( java.lang.ClassNotFoundException: org.apache.axis.encoding.Base64 ).


Deuxième étape (non débutée)

  • support pour utilisation de TAP par nos collègues d'Edimbourg
  • ogsadai4_2.tar.gz: Save of the installation of ogsadai 4.2
Topic attachments
I Attachment Action Size Date Who Comment
Unknown file formatgz ogsadai4_2.tar.gz manage 27741.9 K 2013-01-07 - 08:20 UnknownUser Save of the installation of ogsadai 4.2
Topic revision: r17 - 2013-01-31 - LaurentMiguel
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback