0

Le concept d'ombrage sur SQL azure est l'une des meilleures options recommandées pour dépasser la limite de taille de base de données de 50 Go, pour l'instant. Une stratégie clé dans le sharding consiste à regrouper les enregistrements associés appelés unités atomiques dans un seul fragment, de sorte que l'application doit uniquement interroger une seule instance SQL azure pour récupérer les données.Applications SQL Sharding et réseautage social SQL

Toutefois, dans des applications telles que les applications de réseaux sociaux, le regroupement d'une unité atomique dans un même fragment n'est pas trivial, en raison de l'interconnexion des entités et des enregistrements. Quelle pourrait être une approche recommandée basée sur un tel scénario?

Dans une base de données partitionnée, quelles clés primaires doivent être utilisées pour les tables? Big Int ou GUID. J'utilise actuellement des colonnes d'identité BIGINT, mais si les données devaient être fusionnées pour une raison quelconque, cela serait un problème en raison des conflits entre les valeurs dans différents fragments. J'ai entendu certaines personnes recommander des GUID (UniqueIdentifier), mais je me méfie de la façon dont cela pourrait affecter les performances. L'indexation de serveurs SQL sur site avec des colonnes UniqueIdentifier n'est pas possible, et je me demande comment SQL azure implémente des stratégies similaires si je devais employer une colonne UniqueIdentifier.

Répondre

0

Pour une application de réseau social, je préfèrerais renoncer à utiliser SQL et utiliser plutôt une solution noSQL telle que MongoDB ou Azure Table Storage. Ces systèmes non normalisés mais coûteux vous permettent de créer plusieurs ensembles de données d'entités personnalisés selon vos différents besoins d'indexation.

Ainsi, au lieu d'avoir quelque chose comme ... Utilisateur1 - < relationshiptable - < Utilisateur2

Vous auriez plutôt avez des tables comme utilisateurs de User1 Amis User2 Amis

Si les utilisateurs 1 et 2 sont les deux amis, alors vous auriez deux entrées pour définir cette relation, pas une. Mais si rend la récupération d'une liste d'amis d'un utilisateur spécifique trivial. Il vous permet également d'exécuter des tâches en parallèle, en recherchant plusieurs tables d'index à la fois.

Ce processus s'adapte extrêmement bien, mais nécessite que vous investissiez plus de temps dans la façon dont les relations sont maintenues. Certes, c'est un exemple simplex. Les choses deviennent beaucoup plus complexes lorsque vous commencez à discuter de tâches comme la recherche dans l'ensemble de votre base d'utilisateurs.

+0

Je suis conscient des options basées sur NOSQL et même du stockage de table Azure mais cela augmenterait certainement considérablement les temps de développement, donc nous sommes bloqués avec une approche db relationnelle pour le moment. – Azwaan

+0

Ensuite, j'explorerais l'hébergement du RBDMS ailleurs (Amazon, Rackspace, etc ...). Cela vous permettrait de faire plus de DB sur des machines virtuelles plus puissantes. Assurez-vous simplement de mettre dans une couche de cache pour aider à contrôler les coûts et augmenter les performances. Personnellement, j'explorerais toujours la route noSQL. C'est la solution qui sera la meilleure pour vous à long terme. Même si vous ne le faites que de manière mixte (index dans SQL Azure, banques de données dans Azure Storage). – BrentDaCodeMonkey

+0

En supposant que j'irais avec NOSQL DB s'exécutant sur Azure, comment évalueriez-vous un DB graphique (considérant que le DB graphique a de nombreuses fonctionnalités adaptées aux scénarios de type réseau social) comme Neo4J ou Sones GraphDB contre le stockage de table Windows? – Azwaan

Questions connexes