Upgrade to Pro — share decks privately, control downloads, hide ads and more …

De normalisation & dénormalisation à CQRS

AlumnForce
January 12, 2018

De normalisation & dénormalisation à CQRS

Qu'est-ce que la normalisation des données ? Et la dénormalisation ? Comment placer le curseur ? Faire les deux avec CQRS.

AlumnForce

January 12, 2018
Tweet

Other Decks in Technology

Transcript

  1. Normalisation : exemple 4 ID First Name Last Name Diplomas

    1 Jean Dupont licence A, master B 2 John Doe licence C USER
  2. Normalisation : exemple 5 ID First Name Last Name Diplomas

    Diploma 1 Diploma 2 1 Jean Dupont licence A master B 2 John Doe licence C USER
  3. Normalisation : exemple 6 ID First Name Last Name Diploma

    Diploma 2 1 Jean Dupont licence A master B 1 Jean Dupont master B 2 John Doe licence C USER
  4. Normalisation : exemple 7 ID First Name Last Name 1

    Jean Dupont 2 John Doe USER User ID Diploma 1 licence A 1 master B 2 licence C USER_DIPLOMA
  5. Normalisation : exemple 8 ID First Name Last Name 1

    Jean Dupont 2 John Doe USER ID Name 10 licence A 20 master B 30 licence C DIPLOMA User ID Diploma ID 1 10 1 20 2 30 USER_DIPLOMA
  6. Formes normales 9 1NF 2NF 3NF BCNF ... pas de

    répétition pas de dépendance à une sous-partie de la clé pas de dépendance à un autre attribut
  7. Normalisation : avantages 10 • éviter redondance des données •

    augmenter l'intégrité / interdire les incohérences • stabilité de la modélisation • modélisation plus informative
  8. Normalisation : usage 12 • besoin d'écritures rapides & simples

    • un back office ! • partout si peu de data ou partitionnement efficace
  9. Pourquoi ne pas normaliser ? 13 • coût des jointures

    à la restitution ID First Name Last Name 1 Jean Dupont 2 John Doe USER ID Name 10 licence A 20 master B 30 licence C DIPLOMA User ID Diploma ID 1 10 1 20 2 30 USER_DIPLOMA
  10. Pourquoi ne pas normaliser ? 14 • coût des jointures

    à la restitution • pour faire du quick and dirty • (NoSQL)
  11. Dénormalisation 15 • l'art de dupliquer l'information… • … pour

    la performance en lecture User ID First N. Last N. Dipl. ID 1 Dipl. Name 1 Dipl. ID 2 Dipl. Name 2 1 Jean Dupont 10 licence A 20 master B 2 John Doe 30 licence C null null USER
  12. Et si on faisait les 2 ? 19 • tables

    normalisées + données dénormalisées : ◦ colonnes calculées ◦ tables calculées / vues matérialisées ◦ DB NoSQL + USER_FLAT USER DIPLOMA USER_DIPLOMA +
  13. CQRS « Command Query Responsibility Segregation » 20 DB UI

    Query service Query model Command service Command model writes reads USER_FLAT USER DIPLOMA USER_DIPLOMA ?
  14. Différentes techniques 21 • fil de l'eau synchrone : ◦

    via trigger SQL ◦ code applicatif • full rebuild via cron • fil de l'eau asynchrone via events
  15. Nouvelles notions 22 • recalcul complet / fil de l'eau

    • consistance à terme ( « Eventual Consistency » )
  16. CQRS + event sourcing 23 UI Query service Query model

    Command service Command model Event store Event bus Denormalizer RDBMS Elastic search + events events events