2010-06-27 6 views
1

L'un des premiers exemples de schémas que vous avez lus dans la FAQ HBase est l'exemple de cours étudiant pour une relation multi-plusieurs. Le schéma a une colonne Courses dans la table Student et une colonne Students dans la table Course.Intégrité référentielle et HBase

Mais je ne comprends pas comment dans HBase vous garantissez l'intégrité entre ces deux objets. Si quelque chose devait se bloquer entre la mise à jour d'une table et avant une autre, nous aurions un problème.

Je vois qu'il y a une facilité de transaction, mais quel est le coût d'utilisation de ce qui pourrait être chaque Put? Ou existe-t-il d'autres façons de penser au problème?

Répondre

0

Si vous devez exécuter deux INSERT en tant qu'unité de travail, cela signifie que vous devez utiliser un gestionnaire de transactions pour conserver les propriétés ACID. Il n'y a pas d'autre moyen de penser au problème que je connais.

Le coût est moins une préoccupation que l'intégrité référentielle. Codez-le correctement et ne vous inquiétez pas des performances. Votre code sera le premier endroit pour rechercher des problèmes de performances, pas le gestionnaire de transactions.

1

Sans un journal supplémentaire, vous ne serez pas en mesure de garantir l'intégrité entre ces deux objets. HBase n'a que des mises à jour atomiques au niveau de la ligne. Vous pourriez probablement utiliser cette propriété pour créer un journal de Tx qui pourrait récupérer après un échec.

2

Nous avons rencontré le même problème.

J'ai développé un plugin commercial pour hbase qui gère les transactions et les problèmes de relation que vous mentionnez. Plus précisément, nous utilisons DataNucleus pour un environnement compatible JDO. Notre plugin est listé sur cette page http://www.datanucleus.org/products/accessplatform_3_0/datastores.html ou vous pouvez aller directement à notre petit blog http://www.inciteretail.com/?page_id=236.

Nous utilisons JTA pour notre service de transaction. Donc, dans votre cas, nous traiterions le problème de la relation et aussi toutes les insertions pour les tables d'index (difficile d'avoir une application sans recherche d'index et de tri!).

0

Les modèles relationnels logiques utilisent deux types de relations: un-à-plusieurs et plusieurs-à-plusieurs. Les bases de données relationnelles modélisent directement les clés étrangères ( explicitement appliquées par la base de données comme contraintes ou implicitement référencées par votre application comme colonnes de jointure dans les requêtes) et ces dernières comme tables de jonction (tables supplémentaires où chaque ligne représente une instance de une relation entre les deux tables principales ). Il n'y a pas de cartographie directe de ceux-ci dans HBase, et souvent il revient à normaliser les données. La première chose à noter est que HBase, n'ayant pas de jointures ou de contraintes intégrées, a peu d'utilité pour les relations explicites. Vous pouvez tout aussi bien placer des données qui sont un-à- beaucoup dans la nature dans les tables HBase :. Mais c'est seulement une relation en ce que certaines parties de la rangée dans l'ancienne table arrivent à correspondent à des parties de rowkeys dans la dernière table. HBase ne sait rien de cette relation, donc c'est à votre application de faire des choses avec (si quelque chose).

Questions connexes