Dois-je utiliser prefixfilter ou rowkey analyse de plage dans HBase
Je ne sais pas pourquoi, c'est très lent si j'utilise prefixfilter à la requête. Quelqu'un peut m'expliquer quelle est la meilleure façon d'interroger HBase, merci.
hbase(main):002:0> scan 'userlib',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes('0000115831F8'))}
ROW COLUMN+CELL
0000115831F8001 column=track:aid, timestamp=1339121507633, value=aaa
1 row(s) in 41.0700 seconds
hbase(main):002:0> scan 'userlib',{STARTROW=>'0000115831F8',ENDROW=>'0000115831F9'}
ROW COLUMN+CELL
0000115831F8001 column=track:aid, timestamp=1339121507633, value=aaa
1 row(s) in 0.1100 seconds
Le problème avec cette approche est que, si le dernier caractère est le maximum de la valeur d'un Octet, donc vous ne pouvez pas l'augmenter de 1. Si vous passez 0, puis augmenter de 1 de l'octet suivant, vous demandez HBase pour être inclusive de cette touche de fin qui n'est pas le résultat souhaité
OriginalL'auteur zhukunpeng | 2012-06-08
Vous devez vous connecter pour publier un commentaire.
HBase filtres - même les filtres de lignes - sont vraiment très lent, puisque dans la plupart des cas, ces, procéder à une analyse de la table, puis filtrer ces résultats. Jetez un oeil à cette discussion: http://grokbase.com/p/hbase/user/115cg0d7jh/very-slow-scan-performance-using-filters
Touche de ligne analyse de la plage, cependant, sont en effet beaucoup plus vite qu'ils ne l'équivalent d'un filtrée analyse de la table. C'est parce que la ligne clés sont stockées dans l'ordre de tri (c'est l'une des garanties fondamentales de HBase, qui est un BigTable-comme solution), de sorte que la portée des analyses sur la rangée de touches sont très rapides. Plus d'explications ici: http://www.quora.com/How-feasible-is-real-time-querying-on-HBase-Can-it-be-achieved-through-a-programming-language-such-as-Python-PHP-or-JSP
[JOUR 1] s'avère que PrefixFilter ne faire un full table scan jusqu'à ce qu'il passe le préfixe utilisé dans le filtre (s'il le trouve). La recommandation pour des performances rapides à l'aide d'un PrefixFilter semble être pour spécifier un start_row paramètre en outre à la PrefixFilter. Voir liés 2013 discussion sur la hbase-user mailing liste.
[Mise à JOUR 2, à partir de @aaa90210] En ce qui concerne au-dessus de la mise à jour, il est maintenant un efficace ligne préfixe filtre qui est beaucoup plus rapide que PrefixFilter, voir cette réponse: https://stackoverflow.com/a/38632100/150050
Le point de spécifier START_ROW est absolument en place.
Votre mise à JOUR n'est plus correcte. Il y a un ROWPREFIXFILTER qui est pas le même que PrefixFilter, voir cette réponse stackoverflow.com/a/38632100/150050.
Merci, mise à jour de la réponse et crédité pour la mise à jour.
Le lien pour la première mise à jour est cassé. Auriez-vous l'esprit de la récupérer pour nous?
OriginalL'auteur Suman
DATE: s'avère que PrefixFilter ne faire un full table scan jusqu'à ce qu'il passe le préfixe utilisé dans le filtre (s'il le trouve). La recommandation pour des performances rapides à l'aide d'un PrefixFilter semble être pour spécifier un start_row paramètre en plus à la PrefixF
OriginalL'auteur Sanjeev Jha