NoSQL: obtention des dernières valeurs à partir des tables DynamoDB / Azure Table Storage
J'ai un petit problème qui a besoin de quelques suggestions:
- Permet de dire que nous avons quelques centaines de tables de données avec quelques dizaines de millions de lignes de chaque.
- Des tableaux de données timestamp(clé) - valeur
- Tableaux de données sont écrites une fois chaque seconde
La dernière entrée de chaque tableau doit être rapidement accessible, et sera plus que probablement être demandé au plus
(sorta comme "suivre les données en temps réel"). Avec le manque de " Last()' ou similaire, je pense à la création d'une autre table "LatestValues" où la dernière entrée de chaque tableau de données est mise à jour pour une récupération plus rapide. Ceci, cependant, serait d'ajouter une mise à jour pour chaque opération d'écriture. Aussi, la plupart du trafic serait concentré sur cette table (bon/mauvais?). Est-il une meilleure solution ou suis-je raté quelque chose?
Aussi, disons que nous voulons à la requête pour les valeurs dans les tables de données. Depuis la numérisation est évidemment hors de question, est la seule option qui reste pour créer un index secondaire en dupliquant les données, ce qui permet de doubler la storaging exigences et le montant des opérations d'écriture? D'autres solutions?
Je suis principalement à la recherche à DynamoDB et Azure Table Storage, mais je suis aussi curieux de voir comment BigTable gère cela.
source d'informationauteur user1597701
Vous devez vous connecter pour publier un commentaire.
Je viens de publier un article aujourd'hui avec une certaine commune de "recettes" sur DynamoDB. L'un d'eux est "le Stockage de l'article révisions, obtenant toujours le dernier" je pense qu'il pourrait vous intéresser 🙂
En un mot, vous pouvez obtenir le dernier élément à l'aide de
Query(hash_key=..., ScanIndexForward=True, limit=1)
Mais, cela suppose que vous avez un range_key_defined.
Avec
Scan
vous n'avez aucun de ces paramètres commeScanIndexForward=false
et de toute façon, vous ne pouvez pas compter sur le bon de commande que les données sont réparties sur les partitions et lesScan
demande est d'équilibrer la charge.À atteindre votre but avec DynamoDB, vous pouvez "couper" votre horodatage de cette façon:
hash_key
: daterange_key
: temps plein ou timestamp, comme vous préférezEnsuite, vous pouvez utiliser le "truc" de
Query
+Limit=1
+ScanIndexForward=false
En général, vous voulez probablement seulement pour inverser l'horodatage, de sorte qu'il diminue au fil du temps, laissant la dernière rangée sur le dessus.
Voici un article du blog de la mine décrivant comment faire avec Windows Azure storage: http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-azure.
Mise à JOUR
- Je utiliser DynamoDB pour un projet, mais aussi, dans une manière simpliste, donc je n'ai pas beaucoup d'expérience. Cela dit, http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html me font croire que vous pouvez simplement spécifier
ScanIndexForward=false
etLimit=1
pour obtenir le dernier élément.