6
votes

Stockage de table Azure - À quelle vitesse puis-je numériser de table?

Tout le monde avertit de ne pas interroger contre quoi que ce soit autre chose que de la gaine ou de la partitionkey dans le stockage de la table Azure (ATS), de peur que vous soyez obligé de taper le balayage. Pendant un certain temps, cela m'a paralysé pour essayer de trouver exactement la bonne pk et le RK et de créer des indices pseudo-secondaires dans d'autres tables lorsque je devais interroger quelque chose d'autre.

Cependant, cela me survient que je voudrais communément numériser dans SQL Server lorsque je pensais approprié.

La question devient donc, à quelle vitesse puis-je planifier une table d'azur. Est-ce une constante dans des entités / seconde ou dépend-elles-elles de la taille d'enregistrement, etc. Y a-t-il des règles de pouce quant au nombre d'enregistrements trop nombreux pour analyser la numérisation de table si vous souhaitez une application réactive?


0 commentaires

4 Réponses :


7
votes

La question d'une analyse de table a trait à la traversée des limites de la partition. Le niveau de performance que vous êtes garanti est l'explicitement défini au niveau de la partition. Par conséquent, lorsque vous exécutez une balayage de table complète, son A) n'est pas très efficace, B) n'a aucune garantie de performance. En effet, les partitions elles-mêmes sont définies sur des nœuds de stockage séparé et lorsque vous exécutez une analyse de la partition croisée, vous consommez des quantités potentiellement massives de ressources (attachez simultanément plusieurs nœuds).

Je pense que l'effet de la traversée de ces limites entraîne également des jetons de continuation, ce qui nécessite des retours round supplémentaires au stockage pour récupérer les résultats. Cela résulte alors de réduire les performances, ainsi qu'une augmentation du nombre de transactions (puis de coût).

Si le nombre de partitions / nœuds que vous traversez est assez petit, vous ne remarquerez probablement aucun problème.

Mais s'il vous plaît ne me citez pas à ce sujet. Je ne suis pas un expert en stockage d'azur. C'est en fait la zone d'azur, je suis le moins bien informé. : P


2 commentaires

Vous avez dit "Le niveau de performance que vous êtes garanti est explicitement défini au niveau de la partition." Où est ce jeu / où puis-je trouver des informations à ce sujet?


Ce qui suit est un lien vers le blog Post par un membre de l'équipe de produit qui détaille cette information et d'autres informations. Numérisez la plupart du chemin et vous trouverez la cible d'échelle de la partition unique qui répertorie 500 transactions par partition. blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/...



0
votes

Je pense que Brent est à 100% sur l'argent, mais si vous pensez toujours que vous voulez l'essayer, je ne peux que suggérer de courir des tests pour vous découvrir. Essayez d'inclure la partitionKey dans vos questions pour empêcher les partitions croisées car à la fin de la journée, c'est le tueur de performance.


0 commentaires

0
votes

Les tables Azure ne sont pas optimisées pour les analyses de la table. Numériser la table peut être acceptable pour un travail d'arrière-plan à long terme, mais je ne le ferais pas quand une réponse rapide est nécessaire. Avec une table de toute taille raisonnable, vous devrez gérer les jetons de continuation car la requête atteint une limite de partition ou obtient des résultats 1K.

L'équipe de stockage Azure a un Great Post qui explique les objectifs d'évolutivité . La cible de débit pour une seule partition de table est de 500 entités / s. L'objectif global d'un compte de stockage est de 5 000 transactions / sec.


0 commentaires

0
votes

La réponse est la pagination. Utilisez le top_size code> - Nombre maximal de résultats ou enregistrements en résultat - En conjonction avec Next_partition_key Code> et Next_row_key Code> Les jetons de continuation. Cela rend une différence significative encore factorielle dans la performance. Pour un, vos résultats sont statistiquement plus susceptibles de provoquer une seule partition. Les résultats simples montrent que les ensembles sont regroupés par la clé de continuation de la partition et non la ligne de suite de la ligne.

En d'autres termes, vous devez également penser à votre UI ou à votre sortie système. Ne vous inquiétez pas de plus de 10 à 20 résultats Max 50. L'utilisateur n'utilisera probablement pas ou examiner plus. P>

sonne stupide. Faites une recherche Google pour "chien" et remarquez que la recherche ne renvoie que 10 éléments. Pas plus. Les enregistrements suivants sont utiles pour vous si vous vous souciez de frapper «continuer». La recherche a prouvé que presque aucun utilisateur n'envoie au-delà de cette première page. P>

Le Sélectionnez CODE> (retourner un sous-ensemble des valeurs de clé) peut faire une différence; Par exemple, utilisez SELECT CODE> = "PartitionKey, Rowkey" code> ou 'Nom' code> Quel que soit le minimum dont vous avez besoin. P>

"Je crois que l'effet de franchir ces frontières a également des résultats dans des jetons de continuation, qui nécessitent des retours round supplémentaires à stockage pour récupérer les résultats. Cela résulte alors dans la réduction performance, ainsi qu'une augmentation du nombre de transactions (et Coût ultérieur). " P> BlockQuote>

... est légèrement incorrect. Le jeton de continuation est utilisé non pas en cas de franchement de frontières, mais que des tables d'azur ne permettent pas plus de 1000 résultats; Par conséquent, les deux jetons de continuation sont utilisés pour le prochain ensemble. Par défaut Top_size est essentiellement 1000. P>

Pour votre plaisir de visualisation, voici la description desquelles des requêtes de l'API Azure Python. d'autres sont beaucoup les mêmes. P>

  '''
  Get entities in a table; includes the $filter and $select options. 

  table_name: Table to query.
  filter: 
     Optional. Filter as described at 
     http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx
  select: Optional. Property names to select from the entities.
  top: Optional. Maximum number of entities to return.
  next_partition_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextPartitionKey']
  next_row_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextRowKey']
  '''


0 commentaires