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

29

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?

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:

  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 de 1 000 000 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?
wting
la source
(1) Vous devez préciser la relation entre 2 tables en termes commerciaux. En effet, il peut y avoir des relations parallèles. Par exemple, les utilisateurs <--> utilisateurs n'impliquent pas de relation de 1 mm. Cela pourrait signifier plus de 1. Par exemple: Un utilisateur aime un autre utilisateur et un utilisateur déteste les autres utilisateurs. Ce sont 2 relations. (2) Il serait utile de résumer «exactement» ce que vous voulez.
NoChance
@EmmadKareem: (1) Je ne cherche pas à compliquer le scénario. La seule relation utilisateur <-> utilisateur qui m'intéresse est une amitié mutuelle, qui est une connexion plusieurs à plusieurs. (2) Je voudrais une réponse aux 4 questions énumérées au bas du message.
wting

Réponses:

13

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 le thorem CAP de Brewer ), donc aucune base de données SQL ne le fera si vous insistez sur la disponibilité complète 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.

Old Pro
la source
1
Je me rends compte que je demandais beaucoup, donc une réponse générale aurait été très bien. Les questions centrales sont les suivantes: (1) Pourquoi utiliser la base de données de documents pour un partage supposé important lorsque vous pouvez implémenter un découpage horizontal en logique à l'aide d'un découpage de plage? (2) Comment concevriez-vous une base de données de documents à utiliser dans un scénario FourSquare et comment gère-t-elle certaines utilisations courantes (afficher les connexions de l'utilisateur, afficher les amis de l'utilisateur, afficher les utilisateurs du lieu actuellement enregistrés)?
wting
1
@William, il existe des dizaines d'articles répondant à vos questions facilement accessibles via Google. Même plusieurs sur Stack Overflow seul. Fais tes devoirs.
Old Pro