3

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

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

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

4

1 回答 1

1

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

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

存储关系

  • 选项 A:将关系与数据本身一起存储。那就是您的情况, Person 表将拥有自己的婚姻关系。为此,一个人的每一次婚姻都需要一个唯一的身份,仅在该人的空间中是唯一的。例如,人 A、B 和 C。A 从 2000 年 1 月 1 日到 2002 年 1 月 1 日与 B 结婚,而 A 从 2003 年 1 月 1 日到今天与 C 结婚。从 A 的角度来看,单元格条目看起来像 - 婚姻:1:到 - B,婚姻:1:开始 - 2000 年 1 月 1 日,婚姻:1:结束 - 2002 年 1 月 1 日,婚姻:2:到 - C,婚姻:2:开始 - 2003 年 1 月 1 日。如果更新不是太频繁,这种设计是合适的。
  • 选项 B:将关系存储在自己的空间(表)中。适合关系快速变化的情况。

搜索数据

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

于 2011-01-04T06:34:28.740 回答