1 / 28

REX utilisation de MongoDB chez Joe Mobile

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.

zubeda
Télécharger la présentation

REX utilisation de MongoDB chez Joe Mobile

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. REX utilisation de MongoDB chez Joe Mobile Paris MongoDB User Group 26/02/2014 Extrait de la présentation de Sylvain Bugat

  2. 1 Utilisation principale de MongoDB 2 Développer avec MongoDB 3 Problèmes rencontrés 4 Autres utilisations et conclusion

  3. 1 Utilisation principale de MongoDB 2 Développer avec MongoDB 3 Problèmes rencontrés 4 Autres utilisations et conclusion

  4. Joe Mobile Présentation • 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

  5. Joe Mobile Architecture mise en place

  6. Joe Mobile Cas des CDR (1) • 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 XXXXXX 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

  7. Joe Mobile Cas des CDR (2) • Exemple de structure de CDR stockés:

  8. Joe Mobile Cas des CDR (3)

  9. Joe Mobile Architecture mise en place • 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

  10. 1 Utilisation principale de MongoDB 2 Développer avec MongoDB 3 Problèmes rencontrés 4 Autres utilisations et conclusion

  11. Joe Mobile Développement avec MongoDB (1) • Dépendance MavenMongoDB: <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.11.4</version> </dependency>

  12. Joe Mobile Développement avec MongoDB - configuration Spring(2) <bean id="mongo" class="com.mongodb.Mongo“> <constructor-arg> <list> <refbean="mongoSrv1"/> <refbean="mongoSrv2"/> <refbean="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}"/> <propertyname="passwd" value="${mongo.passwd}"/> </bean> <bean id="cdrMongoFactory" parent="mongoFactory“> <propertyname="dbName" value="${mongo.cdr.dbName}"/> <property name="collectionName" value="${mongo.cdr.collectionName}"/> </bean>

  13. Joe Mobile Développement avec MongoDB - MongoFactory(3) @Service("mongoFactory") public class MongoFactory { @Autowired @Qualifier("mongo") private Mongo mongo; private DB db; private DBCollectioncollection; @Setter private String dbName; @Setter private String collectionName; @PostConstruct public void initCollection() throws IOException { db = mongo.getDB(dbName); collection = db.getCollection(collectionName); }

  14. Joe Mobile Développement avec MongoDB - CdrService(3) @Autowired @Qualifier("cdrMongoFactory") private MongoFactorymongoFactory; 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(); }

  15. Joe Mobile Développement avec MongoDB - Cdr(4) @Getter @Setter public 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; }

  16. Joe Mobile Développement avec MongoDB - DBObject -> Cdr(5) private List<Cdr> dbObjectToCdr( final DBObjectobjDate ) { final List<Cdr> listCdrs = new ArrayList<>(); final List<DBObject> cdrs = ( List<DBObject> ) objDate.get( ATTR_CDRS ); for( final DBObjectobj : 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; }

  17. 1 Utilisation principale de MongoDB 2 Développer avec MongoDB 3 Problèmes rencontrés 4 Autres utilisations et conclusion

  18. Joe Mobile Évolution du Stockage • Espace utilisé en croissance

  19. Joe Mobile Compression des CDR • 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

  20. Joe Mobile Évolution du Stockage • Après compressions et reconstructions du stockage

  21. 1 Utilisation principale de MongoDB 2 Développer avec MongoDB 3 Problèmes rencontrés 4 Autres utilisations et conclusion

  22. Joe Mobile Cas des actes clients et des reçus de paiements • 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

  23. Joe Mobile Cas des reçus de paiements

  24. Joe Mobile Cas des actes clients • 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

  25. Joe Mobile Cas des actes clients

  26. MongoDB Conclusion et points forts/faibles • 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)

  27. Bibliographie • Les bases de données NoSQL par Rudi BruchezÉditions Eyrolles • MongoDB in action par Kyle BankerEditions Manning

  28. Questions

More Related