2012-09-20 8 views
0

Je construis une API et j'ai besoin de stocker des données, j'utilise JSON comme format de réponse au lieu de XML mais je ne sais vraiment pas comment stocker mes données, par exemple, j'ai cetteDevrais-je utiliser NoSQL ou DB relationnel sur une API

{users: [ 
    user: "name", 
    products: [Array with more than 100 products], 
    etc: "other items"], etc... 
} 

le problème est que l'intérieur de l'utilisateur j'ai beaucoup des réseaux alors peut-être il peut affecter ma performance db donc je ne sais pas si choisir NoSQL ou Relational dB. Donc, ma question est vraiment, est-ce que le fait d'avoir trop de tableaux imbriqués avec beaucoup d'éléments à l'intérieur d'un objet affecte ma performance db? ou devrais-je choisir une autre méthode pour sauvegarder mes données?

+0

Cela semble être le cas dans la timonerie de MongoDB. –

+0

même si j'ai beaucoup d'objets imbriqués à l'intérieur de "produits"? par exemple [{id: "", nom: "", description: "", prix: ""}, etc ..] – jtomasrl

Répondre

1

Si vous utilisez NoSQL db alors stocker des données sur plusieurs lignes (ou normalisation) ignore efficacement l'un des meilleurs objectifs de NoSQL .. stocker tout ensemble rendra votre logiciel plus rapide comme il y aura moins d'IO.

Dans mon projet, je stocke toutes les données et les propriétés de l'utilisateur (que les applications tierces peuvent définir via OAuth) dans un seul document. MongoDB a une limite de taille de document de 16 Mo et c'est juste une limite douce.

Dans cette situation, vous pouvez déterminer quels champs sont communs à tous (identifiant, nom, etc.), puis définir une taille maximale pour ces champs communs (disons que le nom sera de 128 caractères). Les chaînes MongoDB sont UTF-8. Vous pouvez maintenant déterminer que ces champs statiques occuperont X octets de chaque document. Les 16 Mo octets restants sont présents dans chaque document pour votre allocation aux tableaux et propriétés personnalisées, etc.

Définissez une taille maximale M à ces valeurs et, ainsi, vous pouvez définir une valeur de plafond N = (16 Mo - X octets/M qui empêche efficacement vos données de document de dépasser la limite.

+0

une chose que j'ai oublié de mentionner: les noms de champs prennent de la place dans le document veuillez en tenir compte également. Ainsi, il est conseillé de garder les noms de champs aussi petits que possible. J'utilise souvent des noms de champs comme a, b, c, 1,2, etc, mais cela rend l'opération de shell difficile. –

Questions connexes