2017-07-27 5 views
0

j'ai données de log dans une base MySQLcomment obtenir des données basées sur la plage de dates dans Redis

id | value | date 
1 | 10.2 | 2017-07-20 18:00:00 
2 | 10.5 | 2017-07-20 18:00:01 
3 | 10.3 | 2017-07-20 18:00:03 

ensuite transformé dans hachage dan triée situé dans Redis. Ceci est mon hash:

hmset mylog:1 id 1 value 10.2 date 1388534400 
hmset mylog:2 id 2 value 10.5 date 1388534401 
hmset mylog:3 id 3 value 10.3 date 1388534402 

et TRIEES Set:

zadd log_date 1388534400 1 
zadd log_date 1388534401 2 
zadd log_date 1388534402 3 

Je veux effectuer la requête comme WHERE date beetween .... and ....

Est-il possible possible d'obtenir des données de hash, selon la date plage dans l'ensemble trié?

Merci!

Répondre

-1

Pour ce faire, d'abord effectuer la requête sur le Sorted pour obtenir automatiquement les membres dans la plage de dates, puis chercher les hashs pertinents.

0

Il y a deux façons possibles.

  1. Conserver les données hashs, les dates que timestamp unix dans le jeu triée, et d'interroger l'ensemble trié à l'aide ZRANGE pour obtenir les ids, puis interroger les hash avec les ids

  2. Une autre approche que je recommande si vos données de ligne MySQL est simple-à-dire 2-3 colonnes avec des valeurs primitives, est de stocker les données lui-même comme une clé dans un ensemble triée, avec la date étant le score.

zadd log_date 1388534400 1_10.2

La position des éléments sur le fractionnement de votre clé est fixe donc [0] index vous donnera l'indice id, 1 vous donnerait la value. De cette façon, toutes vos données se trouveraient dans l'ensemble trié, et vous pouvez interroger les données en utilisant ZRANGE (avec l'indicateur WITHSCORE) pour extraire toutes les données avec les dates dans les dates d'horodatage unix fournies. Cette approche est efficace sur le plan de la mémoire et vous évite également le problème de la liaison de données en deux points où vous devez ajouter ou supprimer des données dans un ensemble trié ainsi que le hachage. Ici, seul l'ensemble trié est requis.

+0

Je sais que c'est une question tout à fait différente, mais en termes de performance est mieux que l'interrogation de la db? que se passe-t-il lorsque vous avez des milliers de dossiers? – marman