Azure Table Storage: Commande par
Je suis en construction d'un site web qui a une liste de souhaits. Je veux stocker la liste de souhaits(s) dans azure table storage, mais également à l'utilisateur d'être en mesure de trier leur liste de souhaits, au moment de la visualisation, un certain nombre de façons différentes - date, date inversée, nom de l'élément de etc. Je tiens également à mettre en œuvre la pagination qui, je crois que je peux mettre en œuvre en faisant usage de la poursuite de jeton.
Ce que je comprends, "order by" n'est pas mis en œuvre et de l'ordre que les résultats sont renvoyés à partir de la table de stockage est basé sur la clé de partition et la touche de ligne. Donc si je veux mettre en œuvre la pagination et de tri que je décris, est la meilleure façon de le mettre en stockant la liste de souhaits plusieurs fois avec des clé de partition /touche de ligne?
Dans ce cas simple, il est probable que la liste de souhaits ne sera pas si grand et je pourrait en effet limiter le nombre maximal d'éléments que vous pouvez apparaître dans la liste, puis se débarrasser de la pagination et de tri dans la mémoire. Cependant, j'ai des cas plus complexes que j'ai aussi besoin de mettre en œuvre la pagination et de tri pour.
OriginalL'auteur s1mm0t | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Aujourd'hui’ s matériel ayant plus de 1000 lignes de détenir, dans une liste, dans la mémoire et le tri est facilement supportable. Ce que la vraie question est, comment est-il possible pour vous d'accéder à l'lignes dans la table de stockage à l'aide des Touches et ne pas avoir à faire une analyse de la table. La duplication des lignes à travers plusieurs tables pourrait être assez lourd à maintenir.
Une autre solution, serait temporairement en scène vos lignes dans SQL Azure et d'appliquer un ordre par-là. Cela peut être efficace que si votre résultat est trop grand pour le travail de mémoire. Pour de meilleurs résultats la table temporaire devra avoir de l'index.
...votre deuxième suggestion est intéressante cependant. Avez-vous jamais fait quelque chose comme cela? Le transfert de données entre les différents stockage pourrait sembler comme une chose qui serait lente.
Je n'ai pas fait récemment. Étant donné que c'est probablement de travail en mode déconnecté du monde, et avec l'évolutivité de l'esprit à travers de multiples instances, le chargement du jeu de résultat, du tableau de stockage, de la mémoire locale pour chaque demande peut être inefficace. Au lieu de cela, mise en scène dans SQL Azure permettrait de données accessible à partir de plusieurs instances, après une seule charge. D'autre part, si votre application est basée sur une instance unique avec un ensemble limité de données, le chargement dans la mémoire pourrait suffire. Je voudrais essayer l'option de mémoire de la première et de passer ensuite à la SQL options si cela ne fonctionne pas à la hauteur des attentes.
Je suis allé à le faire en mémoire pour le moment. Je prends le [heureusement] approche pragmatique de la mise en oeuvre et ensuite se soucier de l'optimisation de la performance si/quand il devient un problème.
Si vous travaillez dans Azure Storage table, en sautant à SQL Azure est un énorme marteau à éviter.
OriginalL'auteur hocho
Pourquoi ne pas faire tout cela .net à l'aide d'une Liste.
Pour ce type d'application, j'aurais pensé SQL Azure aurait été plus approprié.
Mémoire pour 1000 lignes n'est pas beaucoup à tous. Aussi lorsque vous déterminez le coût des prestations, vous devez penser à votre temps. Si vous allez économiser une heure ou plus par mois à partir de l'utilisation de SQL Azure, il est beaucoup plus rentable à l'utilisation de SQL Azure. Sauf si vous travaillez avec des BIG data et je veux dire énorme, les coûts et les avantages de la Table de stockage sur SQL Azure n'est pas synonyme.
Je vous ai donné un plus +1. Il n'est pas toujours à propos des coûts ou de la taille. Pour un multi-locataire de l'application où vous voulez que la séparation des données en créant une table de stockage est plus facile et plus rapide que la création de la base de données.
OriginalL'auteur Adam Pedley
Azure Storage garde des entités dans l'ordre lexicographique, indexé par la Partition de la Clé primaire de l'index et de la Touche de Ligne comme index secondaire. En général, pour votre scénario, ça sonne comme le nom d'utilisateur serait un bon ajustement pour une clé de partition, de sorte que vous avez la Clé de la Ligne afin d'optimiser par chaque requête.
Si vous souhaitez que l'utilisateur puisse voir les listes de souhaits les plus récentes sur le dessus, alors vous pouvez utiliser le journal de la queue modèle de votre ligne de la clé sera l'inverse de la Date l'Heure les Tiques de type DateTime lorsque la liste de souhaits a été entré par l'utilisateur.
https://docs.microsoft.com/en-us/azure/storage/storage-table-design-guide#log-tail-pattern
Si vous voulez utilisateur pour voir leurs listes de souhaits commandé par le nom de l'élément que vous pourriez avoir votre nom de l'élément que votre touche de ligne, et donc les entités naturellement triés par azure.
Lorsque vous écrivez les données que vous souhaitez éliminer les données et de faire de multiples écrit avec ces différents touche de ligne de schémas. Puisque vous avez la même clé de partition comme id d'utilisateur, vous pouvez à ce stade de faire un lot à l'opération d'insertion et de ne pas vous soucier de la cohérence depuis azure table opérations de traitement sont atomiques.
À différencier les différents rowkey schémas, vous pouvez faire précéder chacune avec un const chaîne de valeur. Comme votre inversé les tiques ligne de la valeur de clé par exemple woul dbe quelque chose comme "InvertedTicks_[InvertedDateTimeTicksOfTheWishList]" et vos noms d'élément de ligne de la valeur de clé serait "ItemName_[ItemNameOfTheWishList]"
OriginalL'auteur Dogu Arslan
Quelque chose comme cela a très bien fonctionné pour moi:
Il ignore la question de départ, y compris la pagination dans le champ d'application, et pas seulement de tri.
OriginalL'auteur ProfNimrod