Question

Tout le monde met en garde de ne pas requête sur autre chose que RowKey ou PartitionKey dans Azure Table de stockage (ATS), que vous ne soyez obligé de scan de table. Pendant un certain temps, cela m'a paralysé en essayant de trouver exactement le bon PK et RK et la création d'indices pseudo-secondaires dans d'autres tables quand je besoin de quelque chose d'autre requête.

Cependant, il me semble que je analyse couramment table dans SQL Server lorsque je pensais approprié.

La question devient, à quelle vitesse peut la table I analyse une table Azure. Est-ce une constante dans les entités / seconde ou dépend-elle de la taille disque, etc. Y at-il des règles empiriques quant au nombre de dossiers est trop pour le balayage de la table si vous voulez une application sensible?

Était-ce utile?

La solution

La question d'une analyse de table doit faire avec les limites de traverser la partition. Le niveau de performance vous garanti est fixé de niveau au explicity de partition. Par conséquent, lorsque vous exécutez une analyse complète de la table, son a) pas très efficace, b) n'a pas de garantie de performance. En effet, les partitions elles-mêmes sont définies sur les nœuds de stockage séparés, et lorsque vous exécutez une analyse de partition croisée, vous consommez des quantités potentiellement énormes de ressources (encordement jusqu'à plusieurs nœuds simultanément).

Je crois que l'effet de franchir ces limites entraîne également des jetons de continuation, qui nécessitent d'allers-retours supplémentaires pour le stockage pour récupérer les résultats. Il en résulte alors dans la réduction de la performance, ainsi qu'une augmentation du nombre de transactions (et par la suite coût).

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

Mais s'il vous plaît ne me cite pas à ce sujet. Je ne suis pas un expert sur Azure Storage. Sa fait la zone d'Azur, je suis le moins bien informé. : P

Autres conseils

Je pense que Brent est de 100% par rapport à l'argent, mais si vous vous sentez toujours que vous voulez l'essayer, je ne peux que suggérer d'exécuter des tests pour vous-même. Essayez inclure le PartitionKey dans vos requêtes afin d'éviter de traverser les partitions car à la fin de la journée qui est le tueur de performance.

tables Azure ne sont pas optimisés pour les analyses de table. Numérisation de la table peut être acceptable pour un travail de fond de longue date, mais je ne le ferais pas quand une réponse rapide est nécessaire. Avec une table de toute taille raisonnable, vous devrez jetons de continuation de la poignée que la requête atteint une limite de partition ou obtient des résultats 1k.

L'équipe de stockage Azure a une

La réponse est Pagination. Utilisez le top_size - nombre maximum de résultats ou d'enregistrements dans le résultat - en collaboration avec next_partition_key et next_row_key les jetons de continuation. Cela fait une différence significative même factoriel dans la performance. D'une part, vos résultats sont statistiquement plus susceptibles de provenir d'une seule partition. les résultats montrent que les ensembles simples sont regroupés par la clé de continuation de la partition et non la ligne continue clé.

En d'autres termes, vous devez également penser à votre sortie interface utilisateur ou système. Ne pas la peine de revenir plus de 10 à 20 résultats max 50. L'utilisateur ne sera probablement pas utiliser ou EXAMINE plus.

Ça a l'air stupide. Faites une recherche Google pour « chien » et l'avis que la recherche renvoie seulement 10 articles. Pas plus. Les prochains dossiers sont en vain pour vous si vous dérange pas de frapper « continuer ». La recherche a prouvé que presque aucune des entreprises de l'utilisateur au-delà de cette première page.

le select (retour d'un sous-ensemble des valeurs-clés) peut faire une différence; par exemple, l'utilisation select = "PartitionKey,RowKey" ou 'Name' tout minimum dont vous avez besoin.

"Je crois que l'effet de franchir ces frontières aussi les résultats en jetons de continuation, qui nécessitent d'allers-retours supplémentaires stockage pour récupérer les résultats. Il en résulte alors réduire performance, ainsi qu'une augmentation du nombre de transactions (et par la suite coût). "

... est légèrement incorrecte. la poursuite jeton est utilisé non pas à cause des limites de passage, mais parce que les tables azur permettent pas plus de 1000 résultats; Par conséquent, les deux jetons de continuation sont utilisés pour la prochaine série. différence_de_taille par défaut est essentiellement 1000.

Pour votre plus grand plaisir, voici la description des entités de requêtes de l'API python bleu azur. d'autres sont les mêmes.

  '''
  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']
  '''
scroll top