2017-08-26 5 views
0

Je suis intéressé par la construction d'une application de série temporelle sur redis. Mes données arriveraient parfois historiquement, donc les données seraient mutables. J'ai environ 100 millions d'événements actuellement.Conception de la clé pour l'accès aux données redis

L'accès aux données que je considère devrait être souple pour ordre d'importance

Type

[vente impression commission] DateType [min heures par jour] clientid brandid producttypeid ProductID

I serait de demander quel type de données, donc une vente, une commission, une impression. Ensuite, le type d'agrégation si deuxième, min, heure, jour J'ai une hiérarchie de données d'événement, donc par client, marque, type de produit et chaque produit spécifique.

Y at-il un moyen de construire une clé comme:

vente: heure: clientid: brandid: producttypeid: ProductID

puis requête sur une partie de cette clé comme

vente: heure : clientid: brandid

Ou aurais-je besoin de construire des seaux pour chaque

  • sa le: heure
  • vente: heure: clientid
  • vente: heure: clientid: brandid
  • vente: heure: clientid: brandid: producttypeid
  • vente: heure: clientid: brandid: producttypeid: ProductID

Répondre

0

Je pense que couchbase - avec ses vues (index) serait un meilleur choix non-SQL pour votre cas d'utilisation. vous seriez en mesure de stocker chaque élément comme une seule entrée et ensuite le découper comme vous le souhaitez avec des vues. Cependant, il n'est finalement persistant que sur les vues (donc les données peuvent être un peu obsolètes - quelques secondes/jusqu'à une minute ou plus). Si vous pouvez vivre avec cela, c'est un outil bien meilleur pour vous. c'est aussi persistant, ce qui est plus difficile à obtenir avec redis.

0

Vous pouvez utiliser le kit de tri redis. Checkout this section Index lexicographiques à partir de cette article.

Vous savez quand vous voulez ajouter un élément à SortedSet en utilisant le ZADD commmand. comme ceci:

ZADD key score member 

Mais dans votre cas toutes les colonnes sont chaîne, le score doit être décimale de sorte qu'il est inutile ici. Nous allons toujours mettre le score à 0 pour le garder sans influence pour nous. Parce que avec le même score, l'ensemble triera les éléments avec l'ordre lexicographique de leur membre.

Ensuite, nous créons un index composite avec un jeu de tri comme DB relationnel.Comme ceci:

ZADD myset 0 sale:hour:clientid:brandid:producttypeid:productid:real_value 

Et si vous souhaitez interroger à la vente: heure, vous pouvez le faire: (laisse supposer la vente est l'ID unique de six caractères et l'heure est au format datetime avec AAAA-MM-jjThh et vous voulez interroger quelque chose avec la vente est FG63dF et l'heure est 2017-08-28T08)

ZRANGEBYLEX myset [FG63dF:2017-08-28T08 (FG63dF:2017-08-28T09 

cela renverra les données de cette heure avec la même vente Id. Et toute autre requête est la même avec ci-dessus. A propos de la signification (et [, ces moyens si l'élément de plage est respectivement exclusive ou inclusive

Si vous souhaitez interroger un ensemble de données avec toutes les colonnes, comme ceci:.

ZRANGEBYLEX myset [FG63dF:2017-08-28T08:<client-id>:<brand-id>:<producttypeid>:<product-id> + 

le « + » est . comme la valeur infinie, vous pouvez aussi la limite pour vous spécifique vous pouvez consulter ZRANGEBYLEX détail

Quelque chose à l'avis. toutes les colonnes que vous souhaitez utiliser dans les indices composites comme la vente, l'heure et ainsi de suite doivent avoir le même format, même remplissage. Par exemple, si un brandid a quatre chiffres et que d'autres ont cinq gits, vous devez ajouter un remplissage à gauche à quatre chiffres. Par exemple. 7878 => 07878

Et dans ce cas, nous utilisons le colon pour diviser ces colonnes, donc ces colonnes ne doivent pas avoir deux points.

Plus détaillé "Comment" vous pouvez vous référer à l'article que j'ai mentionné au début.