Moyen efficace de supprimer plusieurs lignes dans HBase
Est-il un moyen efficace pour supprimer plusieurs lignes dans HBase ou est-ce que mon cas d'utilisation, l'odeur ne convient pas pour HBase?
Il y a un tableau de dire "graphique", qui contient des éléments qui sont dans les graphiques. Rangée de touches sont dans le format suivant:
chart|date_reversed|ranked_attribute_value_reversed|content_id
Parfois, j'ai envie de régénérer graphique pour une date donnée, si je veux supprimer toutes les lignes à partir de 'graphique|date_reversed_1' jusqu'à 'graphique|date_reversed_2'. Est-il un meilleur moyen que d'émettre une demande de Suppression pour chaque ligne trouvée par un Scan? Toutes les lignes à supprimer vont être proches les uns des autres.
J'ai besoin de supprimer les lignes, parce que je ne veux pas d'un élément (un content_id) d'avoir plusieurs entrées qui il aura si son ranked_attribute_value avait été changé (changement est la raison pour laquelle graphique doit être régénéré).
Être un HBase débutant, donc peut-être que je pourrait être abusent de lignes pour quelque chose que les colonnes serait mieux, si vous avez une conception suggestions, cool! Ou, peut-être que les graphiques sont mieux généré dans un fichier (par exemple, pas de HBase pour la sortie)? Je suis à l'aide de MapReduce.
OriginalL'auteur jbasko | 2011-01-06
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, arriver au point de la gamme supprimer il n'y a pas de plage de supprimer encore dans HBase, autant que je sache. Mais il existe un moyen de supprimer plusieurs lignes à la fois dans le HTableInterface API. Pour ce tout simplement la forme d'une Suppression de l'objet avec les touches fléchées de numériser et les mettre dans une Liste et l'utilisation de l'API, en fait! Pour faire des analyses plus rapides ne pas inclure n'importe quelle colonne de la famille dans le résultat du scan que tous vous avez besoin est la clé de la ligne pour la suppression des lignes entières.
Deuxièmement, à propos de la conception. Tout d'abord, ma compréhension de l'exigence, il existe de contenu avec le contenu de l'id et de chaque contenu a des graphiques générés contre eux et ces données sont conservées; il peut y avoir plusieurs cartes par du contenu via les dates et dépend du rang. En outre, nous voulons que la dernière production de contenu graphique à afficher en haut de la table.
Pour mon hypothèse de l'exigence, je voudrais suggérer à l'aide de trois tables - auto_id, content_charts et generated_order. La clé de la ligne de content_charts serait son contenu id et la clé de la ligne de generated_order allait être long, ce qui serait auto-décrémenté à l'aide de HTableInterface API. Pour décrémenter utiliser '-1', comme le degré de décalage et d'initialiser la valeur de Long.MAX_VALUE dans le auto_id table au premier démarrage de l'application ou manuellement. Alors maintenant, si vous voulez supprimer les données du graphique, nettoyez simplement la famille de colonne à l'aide de supprimer et ensuite remettre les nouvelles données, puis de les faire mettre dans le generated_order table. De cette façon, la dernière insertion sera également à la tête de la dernière insertion de la table qui va contenir l'id du contenu que de la valeur d'une cellule. Si vous voulez vous assurer generated_order a une seule entrée par le contenu enregistrer le generated_order id d'abord et prendre de la valeur et de l'enregistrer dans content_charts lors de la mise et avant de supprimer la famille de la colonne d'abord de supprimer la ligne de generated_order. De cette façon, vous pourriez recherche et des graphiques pour un contenu à l'aide de 2 obtient au max et pas de balayage requis pour les graphiques.
J'espère que cela est utile.
OriginalL'auteur imyousuf
Vous pouvez utiliser le BulkDeleteProtocol qui utilise une Analyse qui définit la gamme pertinente (début de ligne fin de ligne, les filtres).
Voir ici
OriginalL'auteur Ron Sher
Je suis tombé sur votre situation et c'est mon code pour mettre en œuvre ce que vous voulez
OriginalL'auteur Adelin