Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Endeca: Les pipelines dont une dimension est déclinée dans un grand nombre de variants (II)

Poster un commentaire

Cette question a été abordée dans l’article suivant:

https://amethyste16.wordpress.com/2014/01/31/endeca-les-pipeline-dont-une-dimension-est-declinee-dans-un-grand-nombre-de-variant/

La deuxième méthode proposée présentait l’inconvénient que l’outil d’injection des données dans le pipeline devait obligatoirement connaître le découpage des plages de prix déclaré dans le pipeline. Vous conviendrez que ce n’est pas confortable en terme de maintenabilité.

Nous allons présenter une méthode qui évite ce problème. Elle n’est pas toujours applicable tout de même. Mais les contre-exemples ne devraient pas être bien nombreux.

Commençons avec le pipeline. Nous avons pour la démo créé une dimension chapeau appelée PRICE par exemple. Cette dimension chapeaute autant de sous dimensions qu’il y a de centres. Nous allons nous limiter aux 4 suivants pour la démonstration:

14-02-2014 16-58-31

Je trouve plus intéressant de les déclarer comme inertes. Ces sous-dimensions sont déclarées comme étant des dimensions par range:

14-02-2014 17-00-47

Il n’est pas obligatoire que les ranges soient les même pour chaque centre. Le pipeline est véritablement autonome par rapport à l’injection des données.

La partie intéressante qui fait toute l’astuce est ici:

14-02-2014 17-06-57

Notre exemple est le centre 200. L’idée générale est de ne plus manipuler un prix directement, mais la concaténation du code centre et du prix. Comment ça marche?

Encodage des prix

Nous décidons qu’un prix sera toujours strictement compris entre 0 et 99 999 euros. Soit 5 digits maxi pour la partie entière.

L’encodage se fera de la façon suivante:

123  => 00123

45,6 => 00045,6

A cet encodage on ajoute le code du centre et donc le prix encodée est:

123  => 20000123

45,6 => 20000045,6

Et ainsi de suite. C’est cette valeur qui sera injectée dans la dimension PRICE.

Encodage des plages

Prenons le cas de la plage <10.

Le prix est compris entre 0 et 10 euros. Soit avec l’encodage précédemment définit:

20000000-20000010

Nous avons donc la déclaration:

14-02-2014 17-19-25

Et pour les autres plages:

14-02-2014 17-20-50

C’est simple et efficace.

Quelles sont les limitations?

  • Il faut déjà un code centre numérique. Ca peut s’organiser
  • le prix encodé doit être compatibles avec la définition d’Endeca d’un floating point.
    Si la valeur est trop grande vous risquez de voir apparaître des bugs compliqués.
  • Attention aux valeurs extrêmes qui ne sont pas 0 et POS_INF, mais les valeurs encodées. Sinon vous aurez des surprises je vous laisse deviner pourquoi!

Mes codes centre font au plus 3 digits. Sur 8 (5+3) digits ça à l’air de fonctionner et au pire 99 999 euros c’est énorme pour mon site. Je pourrai diviser par 10 et gagner un digit.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s