J'ai un petit problème qui nécessite quelques suggestions:
La dernière entrée de chaque table doit être rapidement accessible et sera probablement interrogée le plus (en quelque sorte comme "suivre les données en temps réel"). Avec l'absence de 'Last ()' ou similaire, je pensais créer une autre table "LatestValues" où la dernière entrée de chaque table de données est mise à jour pour une récupération plus rapide. Cependant, cela ajouterait une mise à jour supplémentaire pour chaque opération d'écriture. De plus, la majeure partie du trafic serait concentrée sur cette table (bonne/mauvaise?). Existe-t-il une meilleure solution ou est-ce que je manque quelque chose?
Disons également que nous voulons interroger les valeurs dans les tableaux de données. Étant donné que l'analyse est évidemment hors de question, la seule option qui reste pour créer un index secondaire en dupliquant les données, doublant efficacement les exigences de stockage et les opérations d'écriture de quantité? D'autres solutions?
Je regarde principalement DynamoDB et Azure Table Storage, mais je suis également curieux de savoir comment BigTable gère cela.
Je viens de publier un article aujourd'hui avec quelques "recettes" courantes sur DynamoDB . L'un d'eux est "Stockage des révisions d'articles, toujours à jour" Je pense que cela pourrait vous intéresser :)
En un mot, vous pouvez obtenir le dernier élément en utilisant Query(hash_key=..., ScanIndexForward=True, limit=1)
Mais cela suppose que vous avez un range_key_defined.
Avec Scan
, vous n'avez aucun paramètre tel que ScanIndexForward=false
et de toute façon, vous ne pouvez pas vous fier à l'ordre car les données sont réparties sur les partitions et la demande Scan
est ensuite équilibrée en charge.
Pour atteindre votre objectif avec DynamoDB, vous pouvez "diviser" votre horodatage de cette façon:
hash_key
: Daterange_key
: heure ou horodatage complet, comme vous préférezEnsuite, vous pouvez utiliser le "truc" de Query
+ Limit=1
+ ScanIndexForward=false
En général, vous voulez probablement inverser l'horodatage, il diminue donc avec le temps, laissant la dernière ligne en haut.
Voici un article de blog qui explique comment procéder avec le stockage Windows Azure: http://blog.smarx.com/posts/using-numbers-as-keys-in-windows-Azure .
[~ # ~] mise à jour [~ # ~]
J'utilise DynamoDB pour un projet, mais de manière très simpliste, donc je n'ai pas beaucoup d'expérience. Cela dit, http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/QueryAndScan.html me suggère que vous pouvez simplement spécifier ScanIndexForward=false
et Limit=1
pour obtenir le dernier élément.