HBase架构设计

时间:2016-02-17 09:02:12

标签: hbase

我们设计了Hbase架构,这是一种RDBMS风格,但业务需求迫使我们这样做。

假设我们有学生实体和科目实体,学生和科目之间有一对多的映射

学生实体具有以下属性

名称, 学校, 地址, 国家

主题具有以下属性

主旨名称, YearStudied, Subjectdescription, 通过/失败, 得分

首先,我们在学生实体内嵌套了主题,其中学生信息为每个主题重复。

类似rk subjectid,CF:学生(有学生专栏),CF:主题(主题栏目

使用这种方法对学生属性的任何更新都是一个问题,因为必须在所有行中应用这些属性才能识别它们。

所以我们创建了两个单独的表学生和科目,学生中的一列将保留该学生的主题表的所有行键。

我想知道这种设计对性能有何影响。

任何人都可以提出更好的设计选择 - 我们必须同时对学生和科目进行读写操作,并且必须使用HBase!

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果我错了,你的架构设计似乎有问题吗?

如果在学生表中更新和更新,您将如何识别要修改的主题。

假设:

StudKey1:CF1:StdName,CF1:科隆,CF2:SubjectIds,CF2.Coln

现在,如果您需要修改任何特定主题ID的详细信息,请参阅StudKey1的Sub_123,您将如何识别要修改的主题。 除非您在主题表中有复合键,例如 StudKey_SubKey 。现在如果您需要再添加一个主题呢?

现在有几个解决方案可能会顺从您的用例。 您可以尝试以下方式:

有3个表

  1. 学生表
  2. 主题表
  3. Student_Subject_Match table
  4. 将密钥设为:

    1. Tbale1_Key:StudKey
    2. Table2_key:子项
    3. Table3_key:StudKey_SubKey或StudKeySubKey(任何可以进行模糊过滤或正则表达式过滤的方式)
    4. 这样您就可以保留有关学生和主题的所有信息。如果您需要修改有关学生+主题对的任何主题信息,您可以通过触发该学生ID主题ID组合的更新来轻松完成