Post on 24-Feb-2016
description
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