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

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

C’est une excellente question et l’une des plus difficiles à inverser dans les décisions que les architectes de solutions doivent prendre lors de la conception d’Azure.

Il y a plusieurs dimensions à considérer: Du côté négatif, SQL Azure est relativement cher pour le gigaoctet de stockage, ne se redimensionne pas très bien et est limité à 150g / firebase database, cependant, et c’est très important Azure et vos développeurs savent déjà comment le coder.

ATS est un animal différent tous ensemble. Capable d’évolutivité, il est peu coûteux à stocker, mais coûte cher à accéder fréquemment. Cela nécessite également une quantité importante de puissance CPU de vos nœuds à manipuler. Il oblige fondamentalement vos nœuds de calcul à devenir des serveurs mini-db lorsque la délégation de toute activité relationnelle leur est confiée.

Donc, à mon avis, les données fréquemment utilisées qui n’ont pas besoin d’une grande évolutivité et qui ne sont pas très volumineuses doivent être destinées à SQL Azure, sinon Azure Table Services.

Votre exemple spécifique, les données transactionnelles issues de transactions financières, est un endroit parfait pour ATS, tandis que les méta-informations (profils de compte, noms, adresses, etc.) sont parfaites pour SQL Azure.

Igor et Mark ont ​​donné d’excellentes réponses. Permettez-moi d’append un peu plus …

Avec SQL Database (anciennement nommé SQL Azure), vous pouvez désormais disposer de bases de données jusqu’à 500 Go. Pour aller plus loin, vous devez partitionner vos données. Remarque: à l’origine, j’ai suggéré des fragments avec des fédérations SQL, mais cette fonctionnalité a été retirée depuis.

ATS propose des transactions au niveau de la partition (transactions de groupe d’entités). Consultez cet article MSDN pour plus d’informations. Cela n’est pas aussi robuste que les transactions SQL Azure, mais il permet des opérations par lots en une seule transaction.

EDIT Cela fait plus d’un an que cette question a été posée (et répondue). Un sharepoint comparaison était sur les prix. Bien que SQL Azure soit encore plus coûteux que l’ATS, le coût de SQL Azure a considérablement baissé au cours de l’année passée. Les bases de données ont désormais une tarification différenciée, à partir de 4,99 $ pour 100 Mo, puis à 225 $ pour 150 Go (une baisse importante par rapport aux prix de 9,99 $ / Go de l’année dernière).

EDIT août 2014 Une autre année plus tard, une autre mise à jour. Bien que les niveaux Web / Business continuent d’exister, ils sont éliminés (et les fédérations SQL ne sont plus disponibles). Les nouveaux niveaux Basic, Standard et Premium sont désormais disponibles (voir ici pour plus de détails).

Certaines de ces réponses ne semblent pas complètes, alors j’appendai mes 2 cents.

Azure Table’s Good points:

  • Le point fort est sa capacité à stocker beaucoup de petites données; La table Azure est basée sur Azure Blob, mais est orientée vers des données plus petites
  • Beaucoup moins cher qu’Azure SQL Server
  • Chaque fois que vous connaissez la clé de partition et la clé de ligne, l’access aux 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 totale de la ligne est inférieure à 980 Ko (ligne SQL)
  • Où chaque propriété est inférieure à 64 Ko (colonne SQL)
  • Il peut agir en tant que SQL d’un pauvre homme.

Azure table mauvais points:

  • SQL est le point faible. Ne vous attendez pas à l’utiliser sur une grande table SQL ou vous rencontrerez des problèmes de performances.
  • SQL limité est disponible, ne vous attendez pas à des jointures de tout type, en plus de ce que vous implémentez dans Linq
  • Azure Table SQL ne s’adapte pas aussi bien que sa capacité à stocker une quantité infinie de données
  • Chaque fois que vous ne spécifiez pas à la fois une clé de partition et une clé de ligne dans une clause WHERE, attendez-vous à un scan de table lent.
  • Attendez-vous à ce que les performances de l’parsing des tables se dégradent lorsque vous ajoutez des lignes
  • Ne vous attendez pas à ce que les requêtes Azue Table soient rapides lorsque vous ajoutez des lignes supplémentaires
  • En bout de ligne, si vous utilisez Azure Table pour agir, SQL n’ajoute pas beaucoup de données. Si vous avez beaucoup de données (gigaoctets), n’envisagez simplement pas d’obtenir des requêtes SQL de haute performance. Vous économiserez de l’argent si vous n’avez pas besoin de ces fonctionnalités SQL standard.

En ce qui concerne les transactions, c’est l’inverse: SQL Azure prend en charge les transactions. le stockage de table ne le fait pas.

SQL Azure est essentiellement SQL Server exécuté dans Windows Azure. Par conséquent, si vous avez une application existante qui utilise SQL Server, SQL Azure fournit un bon chemin de migration . Cependant, il existe des limites à la taille de la firebase database que vous pouvez avoir sur SQL Azure (actuellement 150 Go), il y a donc des limites à son évolution.

Le stockage de table, quant à lui, est extrêmement évolutif, mais nécessite une façon de penser différente. Ce n’est pas une firebase database relationnelle . Voir par exemple cet article pour une belle introduction: http://msdn.microsoft.com/en-us/magazine/ff796231.aspx

La vraie réponse est: “Essayez vraiment de ne pas utiliser Azure Table Storage”. Chaque fois que vous passez d’une firebase database relationnelle à une firebase database sans SQL, vous devez bien sûr modifier votre façon de penser concernant votre architecture de stockage. Mais les problèmes avec ATS vont bien au-delà du simple besoin de “penser différemment”. Comme d’autres personnes l’ont fait remarquer, ce n’est pas simplement un magasin de données «No-SQL», c’est une instance particulièrement stoppée, handicapée et très peu utilisée d’un magasin No-SQL. Il ne s’agit pas de «penser différemment» à l’ATS; ATS ne vous donne pas les outils dont vous avez besoin pour faire votre travail – des outils que d’autres magasins de données non SQL vous offrent.

La seule bonne chose à propos de l’ATS est que vous pouvez y mettre beaucoup de données très rapidement et avec des frais de stockage minimes. Cependant, vous ne pouvez fondamentalement pas espérer récupérer ces données à moins que vous soyez assez chanceux pour avoir un cas d’utilisation qui corresponde comme par magie à son modèle de stockage Partition-Key / Row-Key. Si vous ne le faites pas – et je suppose que très peu de personnes le font – vous allez faire beaucoup d’parsings de partition et traiter les données vous-même.

Au-delà de cela, Azure Table Storage semble être dans une impasse en termes de développement. Si vous consultez la requête “Support Secondary Indexes” sur les forums de commentaires Azure ( http://feedback.windowsazuree.com/forums/217298-storage/suggestions/396314-support-secondary-indexes ), vous pouvez voir que la prise en charge de Les indices secondaires ont été promis dès 2011, mais aucun progrès n’a été réalisé. Aucun progrès n’a été réalisé sur aucune des autres principales demandes de stockage de tables.

Maintenant, je sais que Scott Guthrie est un gars de qualité, alors j’espère que toute cette stagnation sur la devanture de la Table Storage est une préface à Azure qui la corrige et propose quelque chose de vraiment cool. C’est mon espoir (même si je n’ai aucune preuve, c’est le cas). Mais pour le moment, à moins que vous n’ayez pas le choix, je vous déconseille fortement le stockage de table Azure. Utilisez Azure SQL; utilisez votre propre instance de MongoDB ou une autre firebase database No-SQL; ou utilisez Amazon DynamoDB. Mais n’utilisez pas Azure Table Storage.