Vous êtes sur la page 1sur 4

Analyse technique de la solution C3

Contexte :
Le document suivant rassemble lensemble des remarques que nous avons constats lors de
la monte de comptence sur la plateforme C3.
Description de la solution C3 :
La plateforme C3 est une couche dveloppe au-dessus de solutions de bases de donnes
Open-Sources : Cassandra et PostGres, possdant respectivement les caractristiques capabilit et
robustesse.
LAPI C3 permet linteraction avec ces bases de donnes qu travers une API JavaScript qui
fait appelle une API Rest.
Nous distinguons deux types de fonctionnalits dans lAPI offerte par C3 :
1- Des fonctions destines aux dveloppeurs exemple :
a- Fetch (select) : qui permet de rcuprait des donnes en fonctions dun filtre.
b- c3Count : calcule le nombre denregistrements respectant un filtre.
c- MapReduce : Fonction existante sur Cassandra.
2- Des fonctions mtiers destines aux utilisateurs finaux (Affichage):
a- EvalMetric : applique une interpolation (linaire ou autres), pour combler les points
manquants sur une srie de temps, et agrge les rsultats en fonction dun pas de
temps demand.

Performances et Anomalies :

1 - EvalMetric :
Lappel suivant est sens retourner la consommation lectrique de Janvier Septembre (9 mois),
avec un pas dun mois (un rsultat par mois, donc 9 valeurs) :
BuildingProfile.evalMetric({
expression:"ElectricityConsumptionInterval",
id:"JTAMISIER",
interval: "MONTH",
start:"2016-01-01T00:00:00",
end:"2016-09-12T23:59:59"
});

Nous constatons que le temps dexcution de la requte dure 7.2 Seconds.


2 -a Fetch sur la table Measurments :
Lappel suivant est sens retourn la 30001 me enregistrement de la table Mesures (1 seul
enregistrement).
Measurement.fetch( { offset:30000, limit:1 } )
Nous constatons :
1- Le temps de rponse est de 9.47 secondes pour 1 enregistrement.
2- Aprs les 9.47 secondes au lieu davoir lenregistrement, on a une exception
StackOverflow signifiant dpassement de la pile, et ceci pour charger un 1
enregistrement seulement.
Par curiosit nous retentons la mme instruction avec lindice 0, cest--dire nous voulons rcuprer
le premier lment de la table des mesures.
Measurement.fetch( { offset:0, limit:1 } )

Cette fois-ci le fonction rend bien le bon rsultat mais en 10.98 secondes, encore une fois pour un
enregistrement.
2 -b Fetch sur une table autre que Measurments :
Nous allons prendre pour exemple la table BuildinProfile qui contient seulement 3449
enregistrement avec la requte suivante :
BuildingProfile.fetch( { filter : " profileType == 'residential' " } ) ;

Donc rcuprer les profils de btiments de type rsidence a prend 1.48s sur seulement 3449
enregistrements, sachant que chaque client est sens avoir un ou plusieurs BuildingProfile, ce temps
de rponse risque de devenir trs important ds quon dpassera les 100 000 utilisateurs.
5- c3Count:
Lappel de c3Count est sens renvoy le nombre denregistrement dune table.

Lutilisation de cette fonction sur la table Measurements ne rend jamais de rsultat,


en dpit du fait que cest une fonction classique de de nimporte quelle base de donnes
(SQL ou Non SQL) qui devrait fonctionnait quel que soit la taille de la table.

6- removeAll :
Lappel de removeAll est sens supprimer tous les enregistrements, et de renvoyer le nombre.

Lappel de cette fonction sur la table Measurement ne rend jamais de rsultat, pour sassurer quil ny
a plus denregistrement, nous excutons Measurement.fetch qui ne rpond plus aussi, nous tentons
alors c3Count(Measurement) qui devrait nous retourner 0 si tout est OK, mais hlas aucune rponse
nest retourne.

7- Cache dEvalMetric :
Le premier appel dEvalMetric sur une mtrique pour une dure de 2ans avec un pas de 30
minutes ncessite 1min 30 secondes.

Le vidage de la table Measurements avec removeAll, naltre pas le rsultat dEvalMetric, en effet
mme sil ny a plus aucun enregistrement sur la table Measurement, nous recevons toujours des
valeurs positives.
8- Disfonctionnement de la fonction removeAll :
Comme latteste ce screen-shoot dans certain cas la fonction removeAll ne marche pas du tout, sans
aucun message derreur.

Pour contourner le problme nous avons tents de supprimer les enregistrements avec une boucle
(un par un), sans succs.
Aprs investigation, il savre que le disfonctionnement est du format de lId, seulement si un format
spcifique pour lID est ncessaire, une validation de lID aurait d rejeter linsertion.

9- Indisponibilit de la plateforme :
Il arrive que la plateforme ne rpond plus.