Question

Supposons que j'ai ce tableau RDBM ( entité-attribut-value_model ):

col1: entityID
col2: attributeName
col3: value

et je veux utiliser HBase en raison de problèmes d'échelle.

Je sais que la seule façon d'accéder à la table Hbase utilise une clé primaire (curseur). vous pouvez obtenir un curseur pour une clé spécifique et itérer les lignes une par une.

La question est que dans mon cas, je veux être en mesure de itérer sur les 3 colonnes. par exemple:

  • pour un donné un entityID je veux obtenir tous ses attriutes et valeurs
  • pour donner attributeName et de la valeur que je veux tous les entitiIDS ...

une idée que j'avais est de construire une table Hbase qui contiendra les données (tableau de données, avec entityID comme indice primaire), et 2 tables « d'index » un avec attributeName comme une clé primaire, et l'autre avec la valeur

chaque table d'index tiendra une liste de pointeurs (entityIDs) pour la table de données.

Est-ce une approche raisonnable? ou est est un 'abus' des concepts Hbase?

Dans ce Blog auteur dire:

  

HBase permet obtenir des opérations de primaire   clés et analyses (pensez: curseur) sur la ligne   gammes. (Si vous avez à la fois l'échelle et   besoin d'indices secondaires, ne vous inquiétez pas   - Lucene à la rescousse! Mais c'est un autre poste.)

Savez-vous comment Lucene peut aider?

- Yonatan

Était-ce utile?

La solution

Les index secondaires seraient en effet utiles pour de nombreuses applications potentielles de HBase, et je crois que les développeurs sont en fait regarder. Commander http://www.mail-archive.com /hbase-dev@hadoop.apache.org/msg04801.html.

Dans le même temps cependant, si votre stockage de données d'application peut être modélisé comme un schéma en étoile (voir http : //en.wikipedia.org/wiki/Star_schema ), vous pouvez vous à la caisse la solution que propose Hypertable pour les besoins secondaires de type index http://markmail.org/message/rphm4q6cbar2ycgp

Autres conseils

Je recommande d'avoir deux tables plats différents: un pour rechercher des attributs + valeurs données entityID, et un pour la recherche les valeurs des attributs donnés entityID +

.

Le tableau 1 ressemblerait à ceci:

entityID1 {
  attribute1: value1;
  attribute2: value2;
  ...
}

et Tableau 2:

attribute1_value1 {
  entityID1;
}
attribute2_value2 {
  entityID1;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top