SlideShare une entreprise Scribd logo
1  sur  52
STRASBOURG
Cosmos DB
Globally distributed,
massively scalable,
and multi-model database service
Cosmos DB
Globally distributed,
massively scalable,
and multi-model database service
Cosmos DB
Philippe DIDIERGEORGES
CTO @ Versusmind
MUG Strasbourg
@DePhiless
Speaker
CosmosDB
Introduction et concepts
Exemple: service de log
• Application scalée pour qques Go
• Déployée en France
• Déployée petit à petit dans le monde entier
• De plus en plus de données: plusieurs peta
Problématiques
• Garder un niveau de perf constant
• Gérer les évolution
Dans le monde relationnel
Le problème des migrations
Quand le modèle change:
• Il faut préparer les scripts de migrations
• S’assurer qu’il s’exécute bien
• S’assurer que les changement nécessaire sont effectués (cascade)
Passer au modèle « NoSQL » avec CosmosDB
Document = Objet
• Pas de mapping complexe ni de génération de requête
• Schéma agnostique == pas de migration
Je code, j’initialise mon objet et je le persiste.
?Si ce n’est pas du SQL, comment requêter mes
données?
NoSQL == Not Only SQL
?Pourquoi le NoSQL n’est-il pas la norme depuis 15 ans?
Base de données cloud: les grands principes
Partitionnement
Réplication
Gouvernance des ressources
Partitionnement
Elasticité à l’infini du stockage et du débit
Réplication
Partitionnement
=> Elasticité à l’infini du stockage et du débit
Replication
Gouvernance des resources
?Quel problème apparait lorsque l’on réplique des
données en plusieurs endroit?
Réplication
5 Stratégies de gestion de la consistance des données disponibles:
https://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels
Gouvernance et Garanties
Pilotage de l’espace et du débit
- Provisionnement des ressource partagé ou ciblé
SLA de 1er ordre:
- 99,99% de disponibilité
- Latence <10ms garantie au 99e centile
- Débit et consistance des données garanties
Paiement à l’utilisation
=> Attention à l’optimisation!
Modélisation
En pratique, comment construit-on notre base de
données?
Structure des bases CosmosDB
Les conteneurs:
- Unité de scalabilité
- Répliqués entre les régions
- Débit (througput) réservé / partagé
- Options de TTL, indexation, …
Structure des bases CosmosDB
Les Items:
- Organisés dans des partitions logiques
avec la PartitionKey
Triggers, ProcStoc, Merge proc et UDF
écrites en JS
Notre contexte
Nous disposons de services
Ces services sont composés d’applications
Les applications génèrent des logs techniques contenant un environnement,
une criticité, un message et une stacktrace
Une page permet d’afficher les derniers logs et de requêter ces logs selon
des filtres.
Il est possible de consulter le détail d’un log et d’y trouver les informations
de l’environnement et de l’application.
Un état du service et de ses applications est disponible en fonction des logs
sur la dernière heure.
Le cas de notre application de logs
L’approche relationnelle
Applications
AppID
AppName
AppUrl
EnvName
SrvID
Service
SrvID
SrvName
Logs
LogID
LogLevel
Message
StackTrace
AppID
Analysons les requêtes
1. Identification des requêtes
2. Catégoriser les requêtes
• Command (écritures)
• Query (lectures)
Analysons les requêtes
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Volumes de données
• 5 services
• 2 – 10 applications par service
• 5000 – 500.000 logs par jour / application
Limites du système relationnel
• La quantité de données impacte directement les performances
• La mise en place d’indexes permettra d’optimiser les requêtes
• Les jointures sont très consommatrices
Le modèle de données de CosmosDB
Le modèle de données de CosmosDB
Dans CosmosDB, on stocke des documents dans des conteneurs
> Comme des lignes dans une table?
NON
Le cas de notre application de logs
Dans CosmosDB, on stocke des documents dans des conteneurs
Analysons les requêtes – V0
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Etape 1: partionnement
Etape 1: partitionnement
Au niveau des données: les conteneurs
Services Container
Applications Logs
PartitionKey: AppID
Type: "app"
AppID
AppName
AppUrl
EnvName
SrvID
Services
PartitionKey: SrvID
SrvID
SrvName
PartitionKey: AppID
Type: "log"
LogID
LogLevel
Message
StackTrace
AppID
Applications Container
Etape 1: partitionnement
Au niveau des données: les partitions logiques
Services Container
Applications Logs
PartitionKey: AppID
Type: "app"
AppID
AppName
AppUrl
EnvName
SrvID
Services
PartitionKey: SrvID
SrvID
SrvName
PartitionKey: AppID
Type: "log"
LogID
LogLevel
Message
StackTrace
AppID
Applications Container
Services Container
Etape 1: partitionnement
Au niveau des données: les partitions logiques
Applications Logs
PartitionKey: AppID
Type: "app"
AppID
AppName
AppUrl
EnvName
SrvID
Services
PartitionKey: SrvID
SrvID
SrvName
PartitionKey: AppID
Type: "log"
LogID
LogLevel
Message
StackTrace
AppID
Applications Container
Analysons les requêtes – V0
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Analysons les requêtes – V1
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Etape 2: Dénormalisation
Introduction: dénormalisation
Enrichir les données dans les documents
Rassembler les données de plusieurs tables en une seule
Objectif: réduire le besoin de jointure pour optimiser les requêtes les
plus gourmandes
Utilisation de procédures stockées
• Ecrites en Javascript
• Exécutée comme une transaction atomique
• Limitée à une seule partition logique
Dénormalisation dans la même partition
logique
Services Container
Applications Logs
PartitionKey: AppID
Type: "app"
AppID
AppName
AppUrl
EnvName
SrvID
SrvName
Services
PartitionKey: SrvID
SrvID
SrvName
PartitionKey: AppID
Type: "log"
LogID
LogLevel
Message
StackTrace
AppID
AppName
SrvID
SrvName
Applications Container
Dénormalisation dans la même partition
logique
Analysons les requêtes – V1
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Analysons les requêtes – V2
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Dénormalisation entre partitions et
conteneurs avec le change feed
Services Container
Applications Logs
PartitionKey: AppID
Type: "app"
AppID
AppName
AppUrl
EnvName
SrvID
SrvName
AppStatus
Services
PartitionKey: SrvID
SrvID
SrvName
SrvStatus
PartitionKey: AppID
Type: "log"
LogID
LogLevel
Message
StackTrace
AppID
AppName
SrvID
SrvName
Applications Container
Dénormalisation entre partitions et
conteneurs avec le change feed
Last100 Container
Logs
PartitionKey: type
Type: applog/srvlog
LogID
LogLevel
Message
StackTrace
AppID
AppName
SrvID
SrvName
Analysons les requêtes – V2
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Analysons les requêtes – V3
• [C1] Ajouter / modifier un service
• [Q1] Consulter un service
• [C2] Ajouter / modifier une app
• [Q2] Consulter une app
• [Q3] Lister les apps d’un service et leur état
• [C3] Ajouter un log
• [Q4] Lister les logs d’une application / d’un service
• [Q5] Lister les logs (avec nom du service et de l’app)
• Les 100 derniers
• Pour un service / une application donnée
• Pour un environnement donné
• Pour une criticité donnée
Intégration grâce au change feed
=> Le change feed permet d’imaginer de nombreux scénarii
Architecture orientée événements
Intégration grâce au change feed
=> Analyse et exploitation temps réel des données
Architecture orientée événements
Intégration grâce au change feed
=> Système de recommandation
Architecture orientée événements
One more thing
Recherche full-text avec CosmosDB et Azure Search
?Intéressés par un atelier CosmosDB?
Merci 
@DePhiless

Contenu connexe

Similaire à Global Azure Bootcamp 2019 Strasbourg - Cosmos DB

Azure Services Platform
Azure Services PlatformAzure Services Platform
Azure Services PlatformGregory Renard
 
atam guide de developpement v1.3
atam guide de developpement v1.3atam guide de developpement v1.3
atam guide de developpement v1.3Abdessamad Hamouch
 
11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .netHamza SAID
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx FranceMarc Bojoly
 
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...Microsoft Technet France
 
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...Nathalie Richomme
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EESabri Bouchlema
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...GUSS
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Microsoft
 
Architecture de services web de type ressource
Architecture de services web de type ressourceArchitecture de services web de type ressource
Architecture de services web de type ressourceAntoine Pouch
 
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...itSMF France
 
Déploiement d’applications
Déploiement d’applicationsDéploiement d’applications
Déploiement d’applicationsMohammed Jaafar
 
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...Amazon Web Services
 
Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Nabil Babaci
 

Similaire à Global Azure Bootcamp 2019 Strasbourg - Cosmos DB (20)

Azure Services Platform
Azure Services PlatformAzure Services Platform
Azure Services Platform
 
atam guide de developpement v1.3
atam guide de developpement v1.3atam guide de developpement v1.3
atam guide de developpement v1.3
 
11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net
 
Université de la performance - Devoxx France
Université de la performance - Devoxx FranceUniversité de la performance - Devoxx France
Université de la performance - Devoxx France
 
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...
Migrez vos bases de données vers SQL Server et SQL Azure avec Microsoft SQL S...
 
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...
4D Summit Europe 2016 - Conférence d'A&C Consulting : "Stocker des données su...
 
Mysql
MysqlMysql
Mysql
 
Perf university
Perf universityPerf university
Perf university
 
Développement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EEDéveloppement d'applications pour la plateforme Java EE
Développement d'applications pour la plateforme Java EE
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...
SQLSaturday Paris 2014 - Ce que tout DBA doit savoir sur la configuration et ...
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
22462A_01.pptx
22462A_01.pptx22462A_01.pptx
22462A_01.pptx
 
Architecture de services web de type ressource
Architecture de services web de type ressourceArchitecture de services web de type ressource
Architecture de services web de type ressource
 
Azure Mesh Et Surface
Azure Mesh Et SurfaceAzure Mesh Et Surface
Azure Mesh Et Surface
 
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...
Gestions des Asset et des changements appliquées au Datacenter: Du concept à ...
 
Déploiement d’applications
Déploiement d’applicationsDéploiement d’applications
Déploiement d’applications
 
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
AWS Summit Paris - Track 4 - Session 2 - Migration Cloud, modernisation des a...
 
Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013Workflow et bcs sous share point 2013
Workflow et bcs sous share point 2013
 

Global Azure Bootcamp 2019 Strasbourg - Cosmos DB

  • 2. Globally distributed, massively scalable, and multi-model database service Cosmos DB
  • 3. Globally distributed, massively scalable, and multi-model database service Cosmos DB
  • 4. Philippe DIDIERGEORGES CTO @ Versusmind MUG Strasbourg @DePhiless Speaker
  • 6. Exemple: service de log • Application scalée pour qques Go • Déployée en France • Déployée petit à petit dans le monde entier • De plus en plus de données: plusieurs peta Problématiques • Garder un niveau de perf constant • Gérer les évolution
  • 7. Dans le monde relationnel Le problème des migrations Quand le modèle change: • Il faut préparer les scripts de migrations • S’assurer qu’il s’exécute bien • S’assurer que les changement nécessaire sont effectués (cascade)
  • 8. Passer au modèle « NoSQL » avec CosmosDB Document = Objet • Pas de mapping complexe ni de génération de requête • Schéma agnostique == pas de migration Je code, j’initialise mon objet et je le persiste.
  • 9. ?Si ce n’est pas du SQL, comment requêter mes données?
  • 10. NoSQL == Not Only SQL
  • 11. ?Pourquoi le NoSQL n’est-il pas la norme depuis 15 ans?
  • 12. Base de données cloud: les grands principes Partitionnement Réplication Gouvernance des ressources
  • 13. Partitionnement Elasticité à l’infini du stockage et du débit
  • 14. Réplication Partitionnement => Elasticité à l’infini du stockage et du débit Replication Gouvernance des resources
  • 15. ?Quel problème apparait lorsque l’on réplique des données en plusieurs endroit?
  • 16. Réplication 5 Stratégies de gestion de la consistance des données disponibles: https://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels
  • 17. Gouvernance et Garanties Pilotage de l’espace et du débit - Provisionnement des ressource partagé ou ciblé SLA de 1er ordre: - 99,99% de disponibilité - Latence <10ms garantie au 99e centile - Débit et consistance des données garanties Paiement à l’utilisation => Attention à l’optimisation!
  • 18. Modélisation En pratique, comment construit-on notre base de données?
  • 19. Structure des bases CosmosDB Les conteneurs: - Unité de scalabilité - Répliqués entre les régions - Débit (througput) réservé / partagé - Options de TTL, indexation, …
  • 20. Structure des bases CosmosDB Les Items: - Organisés dans des partitions logiques avec la PartitionKey Triggers, ProcStoc, Merge proc et UDF écrites en JS
  • 21. Notre contexte Nous disposons de services Ces services sont composés d’applications Les applications génèrent des logs techniques contenant un environnement, une criticité, un message et une stacktrace Une page permet d’afficher les derniers logs et de requêter ces logs selon des filtres. Il est possible de consulter le détail d’un log et d’y trouver les informations de l’environnement et de l’application. Un état du service et de ses applications est disponible en fonction des logs sur la dernière heure.
  • 22. Le cas de notre application de logs L’approche relationnelle Applications AppID AppName AppUrl EnvName SrvID Service SrvID SrvName Logs LogID LogLevel Message StackTrace AppID
  • 23. Analysons les requêtes 1. Identification des requêtes 2. Catégoriser les requêtes • Command (écritures) • Query (lectures)
  • 24. Analysons les requêtes • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 25. Volumes de données • 5 services • 2 – 10 applications par service • 5000 – 500.000 logs par jour / application
  • 26. Limites du système relationnel • La quantité de données impacte directement les performances • La mise en place d’indexes permettra d’optimiser les requêtes • Les jointures sont très consommatrices
  • 27. Le modèle de données de CosmosDB
  • 28. Le modèle de données de CosmosDB Dans CosmosDB, on stocke des documents dans des conteneurs > Comme des lignes dans une table? NON
  • 29. Le cas de notre application de logs Dans CosmosDB, on stocke des documents dans des conteneurs
  • 30. Analysons les requêtes – V0 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 32. Etape 1: partitionnement Au niveau des données: les conteneurs Services Container Applications Logs PartitionKey: AppID Type: "app" AppID AppName AppUrl EnvName SrvID Services PartitionKey: SrvID SrvID SrvName PartitionKey: AppID Type: "log" LogID LogLevel Message StackTrace AppID Applications Container
  • 33. Etape 1: partitionnement Au niveau des données: les partitions logiques Services Container Applications Logs PartitionKey: AppID Type: "app" AppID AppName AppUrl EnvName SrvID Services PartitionKey: SrvID SrvID SrvName PartitionKey: AppID Type: "log" LogID LogLevel Message StackTrace AppID Applications Container
  • 34. Services Container Etape 1: partitionnement Au niveau des données: les partitions logiques Applications Logs PartitionKey: AppID Type: "app" AppID AppName AppUrl EnvName SrvID Services PartitionKey: SrvID SrvID SrvName PartitionKey: AppID Type: "log" LogID LogLevel Message StackTrace AppID Applications Container
  • 35. Analysons les requêtes – V0 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 36. Analysons les requêtes – V1 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 38. Introduction: dénormalisation Enrichir les données dans les documents Rassembler les données de plusieurs tables en une seule Objectif: réduire le besoin de jointure pour optimiser les requêtes les plus gourmandes
  • 39. Utilisation de procédures stockées • Ecrites en Javascript • Exécutée comme une transaction atomique • Limitée à une seule partition logique Dénormalisation dans la même partition logique
  • 40. Services Container Applications Logs PartitionKey: AppID Type: "app" AppID AppName AppUrl EnvName SrvID SrvName Services PartitionKey: SrvID SrvID SrvName PartitionKey: AppID Type: "log" LogID LogLevel Message StackTrace AppID AppName SrvID SrvName Applications Container Dénormalisation dans la même partition logique
  • 41. Analysons les requêtes – V1 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 42. Analysons les requêtes – V2 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 43. Dénormalisation entre partitions et conteneurs avec le change feed
  • 44. Services Container Applications Logs PartitionKey: AppID Type: "app" AppID AppName AppUrl EnvName SrvID SrvName AppStatus Services PartitionKey: SrvID SrvID SrvName SrvStatus PartitionKey: AppID Type: "log" LogID LogLevel Message StackTrace AppID AppName SrvID SrvName Applications Container Dénormalisation entre partitions et conteneurs avec le change feed Last100 Container Logs PartitionKey: type Type: applog/srvlog LogID LogLevel Message StackTrace AppID AppName SrvID SrvName
  • 45. Analysons les requêtes – V2 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 46. Analysons les requêtes – V3 • [C1] Ajouter / modifier un service • [Q1] Consulter un service • [C2] Ajouter / modifier une app • [Q2] Consulter une app • [Q3] Lister les apps d’un service et leur état • [C3] Ajouter un log • [Q4] Lister les logs d’une application / d’un service • [Q5] Lister les logs (avec nom du service et de l’app) • Les 100 derniers • Pour un service / une application donnée • Pour un environnement donné • Pour une criticité donnée
  • 47. Intégration grâce au change feed => Le change feed permet d’imaginer de nombreux scénarii Architecture orientée événements
  • 48. Intégration grâce au change feed => Analyse et exploitation temps réel des données Architecture orientée événements
  • 49. Intégration grâce au change feed => Système de recommandation Architecture orientée événements
  • 50. One more thing Recherche full-text avec CosmosDB et Azure Search
  • 51. ?Intéressés par un atelier CosmosDB?

Notes de l'éditeur

  1. Cout du stockage SQL optimise le stockage + fonctionnalités avancées
  2. SQL API CosmosDB for MongoDB API Table API Cassandra API Gremlins APIM (graph) Apache Spark queries
  3. Cout du stockage SQL optimise le stockage + fonctionnalités avancées