2010-06-27 83 views
1

您在HBase FAQ中阅读的第一个示例模式之一是学生课程中的多关系示例。该模式在Student表中有一个课程列,在课程表中有一个学生列。参考完整性和HBase

但我不明白HBase如何保证这两个对象之间的完整性。如果在更新一个表格和另一个表格之间出现问题,我们会遇到问题。

我看到有一个交易设施,但是对于每个Put的使用情况,使用它的成本是多少?或者还有其他方法来思考这个问题吗?

回答

0

如果您必须将两个INSERT作为一个工作单元执行,那意味着您必须使用事务管理器来保留ACID属性。没有其他方法可以考虑我所知道的问题。

成本是少参考完整性的关注。正确编码,不要担心性能。您的代码将成为查找性能问题的第一位,而不是事务管理器。

1

没有额外的日志,您将无法保证这两个对象之间的完整性。 HBase只在行级别有原子更新。尽管可以使用该属性创建一个可以在故障后恢复的Tx日志。

2

我们遇到同样的问题。

我开发了一个hbase的商业插件,用于处理交易和您提到的关系问题。具体而言,我们利用DataNucleus构建符合JDO标准的环境。我们的插件是上市http://www.datanucleus.org/products/accessplatform_3_0/datastores.html此页面上,或者您可以直接到我们的小博客http://www.inciteretail.com/?page_id=236

我们将JTA用于我们的交易服务。因此,就你的情况而言,我们将处理关系问题以及索引表的任何插入(很难有没有索引查找和排序的应用程序)。

0

逻辑关系模型使用关系的两个主要品种:一个一对多和 许多一对多。关系数据库模型前者直接作为外键( 无论是明确由数据库强制执行,限制或隐含的 应用程序引用作为查询的连接列),而后者为结表(附加 表,其中每一行代表一个实例两个主要关系表 )。在HBase中没有这些映射,并且通常归结为数据规范化。 首先要注意的是,没有任何内置连接或约束的HBase对于显式关系几乎没有用处。您可以轻松地将大量的数据放入HBase表中:但是 这只是一个关系在原表中的行的某些部分发生 对应于后者表rowkeys的部分。 HBase的什么都不知道这个厘清 tionship的,所以它是给你的应用程序做的事情与它(如果有的话)。