2017-10-07 15 views
0

J'ai conçu la table HBase où mon rowkey est dirigé vers les requêtes dont j'ai besoin pour l'exécuter. En suivant les meilleures pratiques, j'ai inclus une portion hachurée comme préfixe de mes rowkeys, en essayant d'étaler les lignes le plus uniformément possible dans mes régions de table.Stratégies pour interroger efficacement dans HBase

Je suis préoccupé par le scénario suivant:

Je suis arrivé des milliards de lignes dans ma fraction de table HBase entre 3 régions. J'utilise cette table pour fournir des données pour une API REST, et pour cela, elle doit fournir les lignes le plus rapidement possible.

Malheureusement, je suis frappé la célèbre erreur de délai d'attente Failed to get result within timeout, timeout=60000ms même si j'invoque soit count "table_name" dans la coquille de HBase ou pour toute autre analyse, y compris startrow et stoprow parameters.It semble balayage par des plages en utilisant le rowkey balaie toute la table HBase .

Compte tenu de ce scénario, je voudrais poser 2 questions:

1) Est-il une stratégie pour récupérer vraiment plage de lignes aussi vite que possible sans toucher l'erreur de délai d'attente? J'apprécie vraiment les pointeurs ici.

2) Comme je suis nouveau dans HBase, pensez-vous que HBase est la meilleure ou au moins adéquate pour fournir des données de récupération rapide à une API REST, étant donné que la recherche est en fait numérisée?

Répondre

1
  1. Augmenter le nombre de serveurs de la région
  2. Augmenter le nombre de régions
  3. Nombre de régions par serveur de région devrait être de l'ordre de 50 pas plus que cela pour une réponse très rapide.
  4. Si possible, créez un serveur de région sur tous les nœuds de données de votre cluster. Ne pas exécuter les serveurs de région de manière isolée

Si la taille de vos données n'est pas énorme, vous pouvez essayer d'utiliser Aerospike comme API, car elle offre une latence de milliseconde pour les opérations get et put.

savoir sur Hbase dans les détails: http://bytepadding.com/hbase/