在HBase中存储它们之间的对象和关系

时间:2011-01-03 07:45:05

标签: hadoop hbase

我正在开始一个涉及存储大型对象数据库和对象之间关系的个人项目。我选择了Hadoop和HBase,因为它需要是多节点的,并且大部分数据都是稀疏的。

来自RDBMS世界我花了很多时间阅读HBase的面向列的结构,并且根据当前的文档,我无法弄清楚如何存储对象和对象之间的关系。

对象本身可以与其他对象具有无限数量的关系,以及无限数量的任意属性。关系也可以具有属性。我的目标是让两个“人”对象通过“已婚”关系链接,而已婚关系有一个属性“日期”,我希望(将来)能够写一个MapReduce来快速找到所有在x和y之间结婚的人。

1 个答案:

答案 0 :(得分:1)

有两个步骤可以遵循(据我所知)。

  1. 存储关系
  2. 搜索数据。
  3. 存储关系

    • 选项A:将关系与数据本身一起存储。这就是你的情况,Person表将保持自己的婚姻关系。为此,每个人的婚姻都需要一个独特的身份,仅在人的空间中独一无二。例如。人员A,B和C. A于2000年1月1日 - 2002年1月1日与B结婚,A从2003年1月1日至今与A结婚。从A的角度来看,细胞条目看起来像 - 婚姻:1:到 - B,婚姻:1:开始 - 1/1/2000,婚姻:1:结束 - 1/1/2002,婚姻:2:到 - C,婚姻:2:开始 - 1/1/2003。如果不经常更新,这种设计是合适的。
    • 选项B:将关系存储在自己的空间(表)中。如果关系变化很快就适合。

    搜索数据

    如果搜索结果可以等待MapReduce完成,那么它很好,但是如果你需要更快速的结果,我会实际上使用另一种工具进行各种搜索,例如弹性搜索,Apache Solr,Apache Lucene等。范围查询在搜索工具(如Solr)中非常简单,结果将比MapReduce快。选择搜索工具的另一个原因是根据需要获取排序顺序。