2014-05-09 2 views
0

Question:Obtenir une ligne valeur Whos se situe entre 2 colonnes

Essentiellement, je veux exécuter l'équivalent de SELECT Locid DE GEOIPMAP où 20 ENTRE RangeStart ET rangeEnd à Cassandra.

  1. Est-ce possible?
  2. Existe-t-il une meilleure solution?

Contexte:

Nous essayons de trouver une solution de données rapide, grand pour une très grande table que nous avons. Nous envisageons de passer à Cassandra, mais je veux savoir s'il est possible d'obtenir rapidement/raisonnablement une valeur comprise entre deux cases (ou une meilleure solution, veuillez suggérer)

Nous avons une liste de plages IP (int64) qui peut être joint à une autre table en sql. La table est essentiellement:

+------------+----------+-------+ 
| RangeStart | RangeEnd | LocID | 
+------------+----------+-------+ 
|   0 |  5000 |  2 | 
+------------+----------+-------+ 
+0

Quelques informations sur vos contraintes de domaine serait utile. Pour un ip donné, pourrait-il être dans plusieurs gammes, ou les gammes ne se chevauchent-elles pas et il y a un mappage multiple entre IP et gammes? –

+0

@TupshinHarper Le début et la fin de la plage sont uniques et ne se chevauchent jamais, et il ne devrait jamais y avoir de zone morte. Les plages de l'ID d'emplacement sont de un à plusieurs ... les plages n'ont qu'un seul locID, mais un seul LocID peut être trouvé dans de nombreuses plages différentes. La fin de gamme atteint un peu plus de 4 milliards. –

Répondre

0

Si vos plages ne se chevauchent pas, vous pouvez le faire dans une partition.

CREATE TABLE locs (
    bucket INT, 
    rangeend INT, 
    locid INT, 
    PRIMARY KEY (bucket, rangeend)); 

Vous voulez utiliser une sorte de clé de partition (seau) pour diviser les choses en plusieurs partitions, sinon vous serez juste faites un point d'accès sur le nœud qui possède cette ligne.

Vous pouvez alors:

SELECT locid FROM locs WHERE bucket = 0 AND rangeend > 20 LIMIT 1; 

vous donnera la Locid de la première ligne dans la partition 0 où fin de la plage> 20.

Questions connexes