web-dev-qa-db-fra.com

Quand faut-il utiliser une base de données documentaire vs relationnelle vs graphique?

Pour les besoins de la 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 base de données

Ceux-ci comporteront très probablement des erreurs, veuillez les signaler.

RDBMS

Les tables:

  • Utilisateurs
  • Des endroits
  • Checkins (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
  • Archivages: 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?

Les inconvénients:

  • CAP: tolérance de partition?

Document/objet

3 bases de données distinctes?

  • Utilisateurs
    • liste d'amis
  • Archivages
    • 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:

  1. Je ne sais pas comment implémenter une base de données de documents.
  2. Comment les bases de données de documents gagnent-elles la tolérance de partition?
  3. 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 d'un million de documents pour chaque utilisateur seraient terriblement médiocres. Je suppose que ce n'est pas le bon comportement?
  4. Quels sont les autres avantages/inconvénients?
29
wting

Votre question pourrait faire l'objet d'un cours collégial d'un semestre. Vous devez le décomposer en morceaux gérables. En tant que tel, je vais simplement jeter quelques réponses partielles.

L'une des premières choses à considérer pour décider du type de base de données à utiliser est le type de requêtes à exécuter et si vous les connaissez toutes avant de créer la base de données. Les bases de données SQL ont l'avantage de requêtes puissantes et flexibles sur toutes les données de la base de données. Les bases de données graphiques ont des capacités de requête hautement spécialisées qui les rendent les meilleures pour les données graphiques et vraiment mauvaises pour les données non graphiques (bien que les bases de données graphiques puissent être des composants dans les bases de données SQL). Les bases de données NoSQL sont beaucoup plus limitées dans leur capacité à récupérer et à exploiter des données.

Le prochain est ce que vous pensez des propriétés ACID: atomicité, cohérence, isolement et durabilité. Les bases de données SQL fournissent des garanties solides sur les 4. Les bases de données NoSQL ne promettent généralement pas les 4, et les façons dont elles partent sont parmi les principales différences qui différencient les différentes implémentations de bases de données NoSQL. D'un autre côté, il n'est pas possible de garantir la cohérence et la disponibilité face à une partition (voir Thor du CAP du brasseur ), donc aucune base de données SQL ne le fera si vous insistez sur la pleine disponibilité face à une partition. Personnellement, je me soucie beaucoup de la durabilité des données dans la base de données, car je travaille généralement avec des données où même une perte de données de 0,0001% est inacceptable, et les ensembles de données sont suffisamment petits pour que je n'ai pas à me soucier des partitions, donc je favoriser fortement les bases de données SQL.

Une autre considération très pratique est la qualité du code du serveur, la disponibilité des administrateurs et des programmeurs de base de données, la qualité du support disponible pour les problèmes qui se posent, la qualité et la disponibilité des bibliothèques d'interface pour connecter votre application à la base de données, etc. MySQL existe depuis près de 2 décennies, la grande majorité des bogues a été corrigée, est très largement utilisé et a donc à la fois un excellent support et une grande disponibilité du personnel, et est susceptible d'être pris en charge pour les 10 prochaines années. Vous ne pouvez dire aucune de ces choses à propos de Riak.

Notez que bien que Google ait pratiquement inventé les bases de données NoSQL afin de pouvoir stocker une version mise en cache et indexée de l'ensemble du Web, il utilise toujours MySQL pour certaines choses.

13
Old Pro