Recherche dans les valeurs d'un redis db

Je suis un novice dans l'utilisation de Redis DB. Après la lecture de certains de la documentation et de la recherche dans certains des exemples sur Internet et également la numérisation stackoverflow.com je peux voir que le Redis est très rapide, à des échelles bien mais cela coûte le prix que nous avons à penser à comment nos données seront accessibles au moment de la conception et les opérations qu'ils auront à subir. Ce que je peux comprendre, mais je suis un peu confus au sujet de la recherche dans les données, ce qui a été si facile, cependant lente, avec la plaine de vieux SQL. Je pourrais le faire dans un sens avec la TOUCHE de commande, mais c'est un O(N) opérations et non O(log(N)). Donc, je voudrais perdre l'un des avantages de Redis.

Ce que font leurs collègues plus expérimentés dire ici?

Prenons un exemple de cas d'utilisation: nous avons besoin de stocker des données personnelles pour env. 100.000 personnes et ces données doivent être recherchés par nom, n ° de téléphone.

Pour cela je voudrais utiliser les structures suivantes:

1. SET for storing all persons' ids {id1, id2, ...} 
2. HASH for each person to store personal data and name it 
like map:<id> e.g. map:id1{name:<name>, phone:<number>, etc...}

Solution 1:

1. HASH for storing all persons' ids but the key should be the phone number
2. Then with the command KEY 123* all ids could be retrieved who have a phone number 
sarting with 123. On basis of the ids also the other personal data could be retrieved.
3. So forth for each data to be searched for a separate HASH should be created.

Mais un inconvénient majeur de cette solution est que l'attribut valeurs doit également être uniquede sorte que l'affectation du numéro de téléphone et l'id dans la table de HACHAGE serait sans équivoque. D'autre part, O(N) d'exécution n'est pas l'idéal.

En outreil utilise plus d'espace que ce qui serait nécessaire et le TOUCHE de commande détériore les performances d'accès. (http://redis.io/commands/keys)

Comment devrait-il être fait dans le droit chemin? Je pourrais aussi imaginer que les id irait dans un ZSET et les données nécessaires à la recherche pourrait être le les scores, mais ce seulement possible de travailler avec des gammes de pas avec seraches.

Je vous remercie également d'avance, cordialement, Tamas

Répondre résumé:
En fait, les deux réponses de l'état que le Redis n'a pas été conçu pour effectuer la recherche dans les valeurs des clés. Si ce cas d'utilisation est nécessaire, soit solutions doivent être mises en œuvre, comme indiqué dans ma solution originale ou dans le dessous de solution.

Ci-dessous solution par Eli a une bien meilleure performanceque mon original, car l'accès aux clés peut être considéré comme constant, seule la liste d'id doit être réitéré à travers, pour avoir accès, ce serait donner O(const) de l'exécution. Ce modèle de données permet également qu'une personne peut avoir le même numéro de téléphone que quelqu'un d'autre et ainsi de suite aussi pour les noms etc... donc 1-n relation est également possible (je dirais avec une vieille disquette de réparation d'urgence de la terminologie).

L'inconvénient de cette solution est que il consomme beaucoup plus d'espace que la mienne et les numéros de téléphone dont de départ chiffres sont connus seulement, n'a pas pu être fouillé.

Merci pour les deux réponses.

source d'informationauteur Tamas | 2013-06-19