rex utilisation de mongodb chez joe mobile

Post on 24-Feb-2016

62 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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

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

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

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

5

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Architecture mise en place

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)

7

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des CDR (2)

Exemple de structure de CDR stockés:

8

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des CDR (3)

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

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

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)

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)

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)

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)

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)

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)

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

18

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Évolution du Stockage

Espace utilisé en croissance

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

20

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Évolution du Stockage

Après compressions et reconstructions du stockage

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

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

23

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des reçus de paiements

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

25

Joe Mobile

MongoDB chez Joe Mobile – 26/02/2014

Cas des actes clients

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

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

28

Questions

MongoDB chez Joe Mobile – 26/02/2014

top related