2010-12-15 387 views
0

Pour commencer, je suis nouveau au concept NoSQL.Utilisation des relations dans NoSQL vs SQL

Je développe essentiellement une API pour permettre aux utilisateurs de créer et de stocker des objets dans notre base de données. Cela se fera à travers une variété de programmes frontaux et conduira à des programmes qui sauvegardent des données privées par utilisateur, des programmes de partage de données et d'exploration de données - en accédant aux données pertinentes sur de nombreux utilisateurs. Un utilisateur peut avoir plusieurs objets et nous ne mettons pas de restrictions sur ce que l'objet est ou comment il est accédé (les programmes seront responsables d'assurer la communication entre eux), donc les objets probables seront des tableaux d'autres objets,

est important est un ACL OBJ OBJ pour les utilisateurs avec diverses autorisations. J'ai aussi anticiper les choses telles que les balises d'objets, etc.

Divers lookups je peux imaginer sont:

  • direct - utilisateur demande fichier
  • mine liste
  • - en tant qu'utilisateur, que puis-je voir
  • liste possédée - quels objets ai-je créés?
  • liste balisée - quels objets sont étiquetés avec 'appX' auxquels je peux accéder. et il y aura inévitablement beaucoup d'autres

J'ai inclus ce qui précède pour montrer le scénario que je considère. Alors que pour l'instant je ne me soucie pas tellement de l'évolutivité, j'aime le concept de schéma sans NoSQL pour que les applications puissent interroger des données d'objets que je ne connais pas, par exemple./user/obj/1/2/3 où tout ce que je sais est l'utilisateur a obj.

Cependant le scénario me semble très relationnel. L'utilisateur a obj, obj a des permissions, permission a utilisateur et attrs etc Et je suis assez sûr que je pourrais le construire dans une base RDMS avec juste beaucoup d'objets sérialisés et de magasins de données json mais il semble un projet NoSQL (et je J'ai beaucoup entendu et j'aimerais l'essayer).

Ainsi, les questions suivantes:

  • Est-ce un emploi pour NoSQL?
  • Comment créer efficacement de tels liens entre les objets (pensait mongodb) et en général existe-t-il des documents/tutoriels sur la façon de modéliser des données dans NoSQL pour gérer de telles choses sans recherche excessive? D'après ce que j'ai lu, je ne vois pas de moyen de stocker de telles données qui peuvent facilement permettre les cas ci-dessus sans essentiellement revenir à un système relationnel. Devrait-il y avoir un compromis RDMS/clé-val par lequel l'authentification et les privilèges sont gérés dans RDMS donnant une clé à la clé/val pour la recherche d'objet (pas sûr comment sous-objet/utilisateur/obj/1/2 la permission fonctionnerait ici). Est-ce que ceci devrait être la réponse? :)
  • Tout autre conseil général est apprécié. Le cas d'utilisation de facebook vanté doit répondre à de telles questions de relation, donc je suis sûr que NoSQL peut le faire - je suis encore à voir comment il peut le faire mieux.

Merci de vous en tenir à une longue question.

Répondre

2

NoSQL: Un très grand nombre d'utilisateurs, la vitesse est essentielle, ne se soucient pas vraiment de l'intégrité des données (son un bonus si cela arrive)

SQL (SGBDR): tout le reste.

0

Tout d'abord, je ne peux pas répondre à votre question entière, mais je crois comprendre:

Si cela est la mesure de vos recherches:

direct - user asks for file 
list mine - as a user what can i see 
list owned - what objects have i created 
list tagged - what objects are tagged with 'appX' that i can access. and there will inevitably be many others 

MongoDB est très bien. Si vous devez ensuite passer du fichier aux utilisateurs pour une raison quelconque, alors vous voulez utiliser SQL.

+0

Je peux voir des situations avec des choses telles que la révocation des privilèges où vous devez savoir quels utilisateurs ont de l'influence sur un objet – jumentous

+1

@jumentous Mon sentiment est que vous devriez utiliser un rdms sauf si vous avez besoin de vitesse. – Mark