Aux fins de discussion, considérons un scénario FourSquare.
Scénario
Entités:
- Utilisateurs
- Des endroits
Des relations:
- Archivages: utilisateurs <-> lieux, plusieurs à plusieurs
- Amis: utilisateurs <-> utilisateurs, plusieurs à plusieurs
Conception de la base de données
Ceux-ci comporteront très probablement des erreurs, veuillez les signaler.
RDBMS
Les tables:
- Utilisateurs
- Des endroits
- Enregistrement (jonction)
- Amis (jonction)
Avantages:
- CAP: cohérence, disponibilité
Les inconvénients:
- CAP: tolérance de partition, aka sharding
- schémas = structure rigide
- mauvaise réplication?
Graphique
Objets:
- Utilisateurs
- Des endroits
Bords:
- Amis: Utilisateur <-> Utilisateur
- Checkins: Utilisateur -> Lieux
- contient l'horodatage
Avantages:
- CAP: cohérence, disponibilité?
- objets et bords sans schéma et facilement modifiables
- requêtes de parcours de graphe, par exemple:
- regroupement
- trouver des groupes d'amis
- trouver des restaurants appréciés par des personnes similaires
- d'autres questions courantes / utiles?
- regroupement
Les inconvénients:
- CAP: tolérance de partition?
Document / objet
3 bases de données distinctes?
- Utilisateurs
- liste d'amis
- Enregistrement
- horodatage
- utilisateur
- endroit
- Des endroits
Avantages:
- CAP: disponibilité, tolérance de partition
- objets sans schéma et facilement modifiables
Les inconvénients:
- CAP: cohérence
Des questions
Pour mémoire, ils ont fini par utiliser MongoDB. En plus de tous ces points d'interrogation ci-dessus:
- Je ne sais pas comment implémenter une base de données de documents.
- Comment les bases de données de documents gagnent-elles la tolérance de partition?
- Pour obtenir les enregistrements d'un seul utilisateur, je suppose que l'opération analysera tous les enregistrements et filtrera les métadonnées pour le nom d'utilisateur (carte + filtre). Les performances de l'analyse de plus de 1 000 000 de documents pour chaque utilisateur seraient terriblement médiocres. Je suppose que ce n'est pas le bon comportement?
- Quels sont les autres avantages / inconvénients?