rex utilisation de mongodb chez joe mobile

28
1 Unissons nos Talents T O G E T H E R T A L E N T E D REX utilisation de MongoDB chez Joe Mobile Paris MongoDB User Group 26/02/2014 Extrait de la présentation de Sylvain Bugat MongoDB chez Joe Mobile – MUG - 26/02/2014

Upload: zubeda

Post on 24-Feb-2016

62 views

Category:

Documents


0 download

DESCRIPTION

REX utilisation de MongoDB chez Joe Mobile. Paris MongoDB User Group 26/02/2014 Extrait de la présentation de Sylvain Bugat. 1. Utilisation principale de MongoDB. 2. Développer avec MongoDB. 3. Problèmes rencontrés. 4. Autres utilisations et conclusion. 1. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: REX utilisation de  MongoDB  chez Joe Mobile

1

Unissons nos Talents

T O G E T H E RT A L E N T E D

REX utilisation de MongoDB chez Joe MobileParis MongoDB User Group

26/02/2014

Extrait de la présentation de Sylvain Bugat

MongoDB chez Joe Mobile – MUG - 26/02/2014

Page 2: REX utilisation de  MongoDB  chez Joe Mobile

2

Unissons nos Talents

T O G E T H E RT A L E N T E D

MongoDB chez Joe Mobile – 26/02/2014

2

4

1

Autres utilisations et conclusion

Développer avec MongoDB

Utilisation principale de MongoDB

3Problèmes rencontrés

Page 3: REX utilisation de  MongoDB  chez Joe Mobile

3

Unissons nos Talents

T O G E T H E RT A L E N T E D

MongoDB chez Joe Mobile – 26/02/2014

2

4

1

Autres utilisations et conclusion

Développer avec MongoDB

Utilisation principale de MongoDB

3Problèmes rencontrés

Page 4: REX utilisation de  MongoDB  chez Joe Mobile

4

Joe Mobile MVNO développé en interne par SFR

Technologies: Java SE 7, Spring (MVC, Core, Security, Mobile), JPA2/Hibernate,

Apache CXF Spring Batch pour le back office Serveur d’application Tomcat 7

Base de données: MySQL MongoDB

MongoDB chez Joe Mobile – 26/02/2014

Présentation

Page 5: REX utilisation de  MongoDB  chez Joe Mobile

5

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Architecture mise en place

Page 6: REX utilisation de  MongoDB  chez Joe Mobile

6

Joe Mobile Besoin: stocker les usages des clients de Joe Mobile :

Structure partiellement hiérarchisée Accès à tous les CDR d’une ligne En moyenne 34/CDR par jour et par ligne active Insertion uniquement Croissance proportionnelle en fonction du nombre de lignes actives Une année d’historique

La consultation doit être immédiate Clés de recherches intégrées dans le champ « _id » Clé retenue: 06 XX XX XX XX YYYY MM DD Seul l’accès via la clé est utilisé Temps de réponse: 0,2s (100 CDR) à 1s (6500 CDR)

L’insertion est assez rapide Effectué au fil de l’eau 230 insertions/s avec dédoublonnage

MongoDB chez Joe Mobile – 26/02/2014

Cas des CDR (1)

Page 7: REX utilisation de  MongoDB  chez Joe Mobile

7

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des CDR (2)

Exemple de structure de CDR stockés:

Page 8: REX utilisation de  MongoDB  chez Joe Mobile

8

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des CDR (3)

Page 9: REX utilisation de  MongoDB  chez Joe Mobile

9

Joe Mobile MongoDB en production:

3 serveurs en réplica-set (1 primary et 2 secondary) Pas de sharding Pas de Mongod

MongoDB en développement/qualification: Solution SAAS via MongoHQ/Cloudbees Ajouts/suppressions de bases rapides Pas de maintenance à effectuer

Peut aussi être installé sur un serveur dédié Solution utilisée en développement au début

MongoDB chez Joe Mobile – 26/02/2014

Architecture mise en place

Page 10: REX utilisation de  MongoDB  chez Joe Mobile

10

Unissons nos Talents

T O G E T H E RT A L E N T E D

MongoDB chez Joe Mobile – 26/02/2014

2

4

1

Autres utilisations et conclusion

Développer avec MongoDB

Utilisation principale de MongoDB

3Problèmes rencontrés

Page 11: REX utilisation de  MongoDB  chez Joe Mobile

11

Joe Mobile Dépendance Maven MongoDB:

<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>2.11.4</version>

</dependency>

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB (1)

Page 12: REX utilisation de  MongoDB  chez Joe Mobile

12

Joe Mobile<bean id="mongo" class="com.mongodb.Mongo“>

<constructor-arg><list>

<ref bean="mongoSrv1"/><ref bean="mongoSrv2"/><ref bean="mongoSrv3"/>

</list></constructor-arg><property name="writeConcern“><util:constant static-field="com.mongodb.WriteConcern.SAFE“/></property>

</bean><bean id="mongoSrv1" class="com.mongodb.ServerAddress“>

<constructor-arg index="0" value="${mongo.host1}"/><constructor-arg index="1" value="${mongo.port1}"/>

</bean><bean id="mongoFactory" class="com.snbl.service.tools.MongoFactory"

abstract="true“><property name="username" value="${mongo.userName}"/><property name="passwd" value="${mongo.passwd}"/>

</bean><bean id="cdrMongoFactory" parent="mongoFactory“>

<property name="dbName" value="${mongo.cdr.dbName}"/><property name="collectionName" value="${mongo.cdr.collectionName}"/>

</bean>

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB - configuration Spring(2)

Page 13: REX utilisation de  MongoDB  chez Joe Mobile

13

Joe Mobile@Service("mongoFactory")public class MongoFactory {

@Autowired@Qualifier("mongo")private Mongo mongo;

private DB db;private DBCollection collection;

@Setterprivate String dbName;@Setterprivate String collectionName;

@PostConstructpublic void initCollection() throws IOException {

db = mongo.getDB(dbName);collection = db.getCollection(collectionName);

}

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB - MongoFactory(3)

Page 14: REX utilisation de  MongoDB  chez Joe Mobile

14

Joe Mobile@Autowired@Qualifier("cdrMongoFactory")private MongoFactory mongoFactory;

private List<DBObject> getDBObjet(String msisdn, String dateDeb, String dateFin) {List<DBObject> listObj = new ArrayList<>();BasicDBObject query = new BasicDBObject();query.put( ATTR__ID, new BasicDBObject( "$lte", msisdn+dateFin ) .append( "$gte", msisdn+dateDeb ) );DBCursor cursor = mongoFactory.getCollection().find(query);try {

while(cursor.hasNext()) { listObj.add( cursor.next() );}

} finally {cursor.close();

}

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB - CdrService(3)

Page 15: REX utilisation de  MongoDB  chez Joe Mobile

15

Joe Mobile@Getter@Setterpublic class Cdr {

private String msisdn;private String type;private String id;private String plateforme;private String pta;private String codeOperation;private String dateDeb;…private String categorieC;private String adresse;private String adresseTraduite;private String pays;private String ncv;private String categorieD;private List<CdrCompteur> compteurs;

}

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB - Cdr(4)

Page 16: REX utilisation de  MongoDB  chez Joe Mobile

16

Joe Mobileprivate List<Cdr> dbObjectToCdr( final DBObject objDate ) {

final List<Cdr> listCdrs = new ArrayList<>();final List<DBObject> cdrs = ( List<DBObject> ) objDate.get( ATTR_CDRS );

for( final DBObject obj : cdrs ) {

Cdr cdr = new Cdr();cdr.setMsisdn((String)objDate.get(ATTR_MSISDN));cdr.setType((String)obj.get(ATTR_TYPE));cdr.setId((String)obj.get(ATTR_ID_TICKET));cdr.setPlateforme((String)obj.get(ATTR_PF));…List<DBObject> objCpts =

(List<DBObject>)obj.get(ATTR_COMPTEURS);if ( objCpts != null ) { List<CdrCompteur> compteurs =

dbObjectToCompteurs(objCpts); cdr.setCompteurs(compteurs);}listCdrs.add(cdr);

}return listCdrs;

}

MongoDB chez Joe Mobile – 26/02/2014

Développement avec MongoDB - DBObject -> Cdr(5)

Page 17: REX utilisation de  MongoDB  chez Joe Mobile

17

Unissons nos Talents

T O G E T H E RT A L E N T E D

MongoDB chez Joe Mobile – 26/02/2014

2

4

1

Autres utilisations et conclusion

Développer avec MongoDB

Utilisation principale de MongoDB

3 Problèmes rencontrés

Page 18: REX utilisation de  MongoDB  chez Joe Mobile

18

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Évolution du Stockage

Espace utilisé en croissance

Page 19: REX utilisation de  MongoDB  chez Joe Mobile

19

Joe Mobile Forte croissance de la base

La consultation étant focalisé que sur les dernières semaines les anciens CDR ont été compressés

Compression de l’ordre de 75%

L’algorithme de récupération des données à adapter

Réorganisation régulière du stockage nécessaire Reconstruction complète de chaque nœud Procédure longue: 1h30-1h45/nœud Taille utilisée divisée par 2

MongoDB chez Joe Mobile – 26/02/2014

Compression des CDR

Page 20: REX utilisation de  MongoDB  chez Joe Mobile

20

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Évolution du Stockage

Après compressions et reconstructions du stockage

Page 21: REX utilisation de  MongoDB  chez Joe Mobile

21

Unissons nos Talents

T O G E T H E RT A L E N T E D

MongoDB chez Joe Mobile – 26/02/2014

2

4

1

Autres utilisations et conclusion

Développer avec MongoDB

Utilisation principale de MongoDB

3Problèmes rencontrés

Page 22: REX utilisation de  MongoDB  chez Joe Mobile

22

Joe Mobile Utilisation de MongoDB concluante sur les CDR

Extension à d’autres cas: Reçus de paiements Timeline des actes clients

Reçus de paiements: Stockage binaire (HTML compressé de 2,16Ko) Accès unitaire 1,4 reçu de paiement en moyenne par mois et par ligne active Insertion uniquement Croissance proportionnelle en fonction du nombre de lignes actives

Identifiant: Date (YY MM DD HH MI SS) Séquence (5 chiffres)

Récupération directe d’un reçu de paiement

MongoDB chez Joe Mobile – 26/02/2014

Cas des actes clients et des reçus de paiements

Page 23: REX utilisation de  MongoDB  chez Joe Mobile

23

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des reçus de paiements

Page 24: REX utilisation de  MongoDB  chez Joe Mobile

24

Joe Mobile Timeline des actes clients :

Structure variable en fonction des types d’actes Accès à tous les actes du clients 4/actes insérés moyenne par client et par mois Insertion uniquement, jamais aucune mise à jour Croissance proportionnelle en fonction du nombre de lignes actives

Identifiant: Identifiant client (10 chiffres) Date (YYYY MM DD HH MI SS) Identifiant de l’acte (2 chiffres)

Récupération directes de tous les actes d’un client

MongoDB chez Joe Mobile – 26/02/2014

Cas des actes clients

Page 25: REX utilisation de  MongoDB  chez Joe Mobile

25

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des actes clients

Page 26: REX utilisation de  MongoDB  chez Joe Mobile

26

MongoDB Utilisation très satisfaisante chez Joe Mobile!

Points forts : Utilisation simple en développement (SAAS) Moteur rapide Stable en production Monitoring intégré par 10gen

Pour les bases de production/pré-production

Points faibles: Fragmentation du stockage Stockage moyennement efficace (espace)

MongoDB chez Joe Mobile – 26/02/2014

Conclusion et points forts/faibles

Page 27: REX utilisation de  MongoDB  chez Joe Mobile

27

Bibliographie

MongoDB chez Joe Mobile – 26/02/2014

Les bases de données NoSQL par Rudi BruchezÉditions Eyrolles

MongoDB in action par Kyle BankerEditions Manning

Page 28: REX utilisation de  MongoDB  chez Joe Mobile

28

Questions

MongoDB chez Joe Mobile – 26/02/2014