web-dev-qa-db-fra.com

Quand devrais-je utiliser SQL Azure et quand devrais-je utiliser le stockage de table?

Quand devrais-je utiliser SQL Azure et quand devrais-je utiliser le stockage de table? Je pensais, utilisais le stockage de table pour les scénarios de traitement des transactions par exemple. Comptes de crédit de débit type de scénario et utilisez SQL Azure lorsque les données ne seront pas utilisées à des fins transactionnelles. Qu'est-ce que tu penses?

68
Allan Rwakatungu

C'est une excellente question et une des décisions plus strictes et plus difficiles à inverser que les architectes de solutions doivent faire lors de la conception d'Azure.

Il y a des dimensions mouplées à considérer: du côté négatif, SQL Azure est relativement coûteux pour les gigaoctets de stockage, ne s'élèverait pas très bien et est limité à 150gigs/bases de données, cependant, et c'est très important, il n'y a pas de frais de transaction contre SQL Azure et vos développeurs savent déjà coder comment le coder.

ATS est un animal différent de tous ensemble. Capable de méga-évolutivité, il est trop bon marché de stocker, mais coûte cher à fréquemment accès. Cela nécessite également une quantité importante de puissance de la CPU à partir de vos nœuds de manipuler. Il oblige fondamentalement vos nœuds de calcul pour devenir des serveurs mini-db, car la délégation de toute activité relationnelle est renvoyée à eux.

Ainsi, à mon avis, des données fréquemment accessibles qui n'ont pas besoin d'une énorme évolutivité et qui ne sont pas superbes de taille supérieure à la taille de SQL Azure, sinon Azure Table Services.

Votre exemple spécifique, les données transactionnelles des transactions financières constituent un lieu idéal pour ATS, tandis que Meta Information (profils de compte, noms, adresses, etc.) est parfait pour SQL Azure.

65
Igorek

Igor et Mark ont ​​donné de grandes réponses. Permettez-moi d'ajouter un peu plus ...

Avec la base de données SQL (anciennement nommé SQL Azure), vous pouvez maintenant avoir des bases de données jusqu'à 500 Go. Aller au-delà de cela, vous auriez besoin de partitionner vos données. Note: À l'origine, j'ai suggéré des éclats avec des fédérations SQL, mais cette fonctionnalité a depuis été retirée.

ATS propose des transactions au niveau de la partition (transactions du groupe d'entité). Voir Cet article MSDN Pour plus d'informations. Ce n'est pas aussi robuste que des transactions SQL Azure, mais elle permet des opérations de lot dans une seule transaction.

[~ # ~ ~] Edit [~ # ~ #] Cela fait plus d'un an que cette question a été posée (et a répondu). Un point de comparaison était sur la tarification. Bien que SQL Azure soit encore plus coûteux que ATS, le coût de SQL Azure a considérablement diminué au cours de la dernière année. Les bases de données ont maintenant une tarification à plusieurs niveaux, à partir de 4,99 $ pour 100 Mo, augmentant de 150 Go de 150 Go (une grosse chute de la tarification de 9,99 $/Go de l'année dernière. Les détails de la tarification complète sont ici .

Edition août 2014 Une autre année plus tard, une autre mise à jour. Alors que les niveaux Web/Business continuent d'exister, ils sont en cours de soleil (et les fédérations SQL ne sont plus disponibles). Les nouveaux niveaux de base, standard et premium sont maintenant disponibles (voir ici pour plus de détails).

31
David Makogon

Certaines de ces réponses ne semblent pas complètes, alors je vais ajouter mes 2 cents.

Les bons points de la table Azure:

  • Le point fort est sa capacité à stocker beaucoup de petites données; La table Azure est basée sur une blob d'azur, mais est orientée vers des données plus petites
  • Beaucoup moins cher que Azure SQL Server
  • Chaque fois que vous connaissez la clé de partition et la clé de ligne, l'accès des données est très rapide.
  • Entity transactions sont possibles si vous placez deux "schémas" différents dans la même clé de partition.
  • Où la taille de la ligne totale est inférieure à 980K (rangée SQL)
  • Où chaque propriété est inférieure à 64k (colonne SQL)
  • Il peut agir comme SQL d'un pauvre homme.

Les mauvais points de la table Azure:

  • SQL est le point faible. Ne vous attendez pas à l'utiliser sur une grande table SQL ou vous subirez des problèmes de performance.
  • SQL limité est disponible, ne vous attendez pas à des jointures de n'importe quel type, outre ce que vous implémentez à Linq
  • La table Azure SQL ne permet pas de mettre en place une capacité de stockage infinie de données
  • Chaque fois que vous ne spécifiez pas à la fois une clé de partition et une clé à ligne dans une clause où se produisent une analyse de table lente.
  • Attendez-vous à ce que la performance de balayage de table se dégrade lorsque vous ajoutez plus de lignes
  • Ne vous attendez pas à ce que les requêtes de table Azue soient rapides comme vous ajoutez plus de lignes
  • En bout de ligne, si vous utilisez une table Azure pour agir comme SQL, n'en ajoutez pas de nombreuses données. Si vous avez beaucoup de données (gigaoctets), ne planifiez tout simplement pas d'obtenir des requêtes SQL hautes performances. Vous économiserez de l'argent si vous n'avez pas besoin de ces fonctionnalités SQL régulières.
17
TLDR

En ce qui concerne les transactions, c'est simplement l'inverse: SQL Azure prend en charge les transactions; Le stockage de la table n'est pas.

SQL AZURE est essentiellement du serveur SQL fonctionnant à l'intérieur de Windows Azure, donc si vous avez une application existante qui utilise SQL Server, SQL Azure fournit un Bon chemin de migration . Cependant, il y a des limites à la taille d'une base de données que vous pouvez avoir sur SQL Azure (actuellement 150 Go), il y a donc des limites à la taille de la taille.

Le stockage de la table, d'autre part, est extrêmement évolutif, mais nécessite une manière différente de penser. C'est pas une base de données relationnelle . Voir par exemple Cet article pour une belle introduction: http://msdn.microsoft.com/en-us/magazine/ff796231.aspx

10
Mark Seemann

La vraie réponse est: "Essayez de ne pas utiliser de stockage de table Azure". Chaque fois que vous passez d'une DB relationnelle à un DB no-SQL, vous devrez bien sûr modifier la manière dont vous pensez à votre architecture de stockage. Mais les problèmes avec ATS vont bien, bien au-delà de devoir "penser différemment". Comme les autres personnes ont souligné, ce n'est pas simplement un magasin de données "no-SQL", c'est un cas particulièrement rabougri, handicapé et très basse-vedette d'un magasin No-SQL. Il ne s'agit pas d'avoir besoin de "penser différemment" à propos de l'ATS; C'est une question d'ATS ne vous donnant pas les outils dont vous avez besoin pour faire vos outils - outils autres que les autres magasins de données SQL SQL font vous donner.

À propos de la seule chose à propos de ATS, c'est que vous pouvez mettre beaucoup de données et beaucoup de données très rapidement, et avec des frais de stockage minimaux. Cependant, vous ne pouvez pas espérer que vous puissiez récupérer ces données sauf si vous êtes suffisamment chanceux d'avoir un cas d'utilisation qui correspond magiquement à son modèle de stockage de clé de clés/ligne à clé. Si vous ne le faites pas, et je soupçonne très peu de gens font - vous allez faire beaucoup de scans de partition et traiter les données vous-même.

Au-delà de cela, le stockage de la table Azure semble être une impasse en termes de développement. Si vous regardez la demande "Indices secondaires de support" sur les forums de rétroaction Azure ( http://feedback.windowsazure.com/forums/217298-storage/suggesions/396314-support-secondaire-indexes ) , vous pouvez voir que le soutien des indices secondaires a été promis aussi loin que 2011, mais aucun progrès n'a été fait. Il n'existe pas non plus de progresser sur l'une des autres demandes de stockage de table.

Maintenant, je sais que Scott Guthrie est un gars de qualité, alors mon espoir est que toute cette stagnation sur la table de stockage de la table est une préface à Azure la fixant et à venir avec quelque chose de vraiment cool. C'est mon espoir (bien que j'ai zéro preuve c'est le cas). Mais pour le moment, à moins que vous n'ayez pas de choix, je vous recommanderais fortement contre le stockage de la table Azure. Utilisez Azure SQL; Utilisez votre propre instance de MongoDB ou d'autres dB no-SQL; ou utilisez Amazon Dynamodb. Mais n'utilisez pas de stockage de table Azure.

3
Ken Smith