HBase模式设计

HBase模式设计,hbase,Hbase,我们设计了下面的Hbase模式,这是一种RDBMS风格,但业务需求迫使我们这样做 假设我们有学生实体和科目实体,学生和科目之间有一对多的映射 学生实体具有以下属性 名字, 学校 地址:, 国家 主题具有以下属性 主题名, 研究了一年, 主题描述, 通过/失败, 得分 首先,我们在学生实体中嵌套主题,学生信息在每个主题中重复 类似于rk主题,CF:Student(带学生列),CF:Subject(主题列 使用这种方法,对学生属性的任何更新都是一个问题,因为它们必须应用于识别它们的所有行 因此,我们

我们设计了下面的Hbase模式,这是一种RDBMS风格,但业务需求迫使我们这样做

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

学生实体具有以下属性

名字, 学校 地址:, 国家

主题具有以下属性

主题名, 研究了一年, 主题描述, 通过/失败, 得分

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

类似于rk主题,CF:Student(带学生列),CF:Subject(主题列

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

因此,我们创建了两个单独的表student和subjects,students中的一列将保存该学生subject表的所有行键

我想知道这种设计对性能的影响

有谁能提出更好的设计方案吗?我们必须对学生和科目进行读写操作,并且必须使用HBase


提前感谢您的帮助。

您的方案设计似乎有缺陷。如果我错了,请纠正我好吗

您将如何确定在学生表中进行修改和更新时要修改的主题

假设:

StudKey1:CF1:StdName,CF1:Coln,CF2:subjects,CF2.Coln

现在,如果您需要修改任何特定主题id的详细信息,请说出Sub_123 for StudKey1,您将如何确定要修改的主题。 除非您在主题表中有一个复合键,如StudKey\u SubKey。现在,如果您需要在课程中再添加一个主题,该怎么办

现在有几个解决方案可以根据您的用例而定。 您可以尝试以下方法:

有3个表

  • 学生桌
  • 主题表
  • 学生\科目\匹配表
  • 具有如下键:

  • Tbale1_键:StudKey
  • 表2_键:子键
  • 表3_键:StudKey_子键或StudKeySubKey(可以使用模糊过滤或正则表达式过滤的任何方式)

  • 通过这种方式,您将能够保留有关学生和科目的所有信息。如果您需要修改关于学生+科目对的任何科目信息,您可以通过对该学生id-科目id组合进行更新轻松完成此操作m设计问题是Hbase是否能够处理这样的设计-性能影响是什么。至于问题Hbase能否处理这样的设计是的,它可以。基本上它可以处理任何行键列的设计,因为它们是作为键值对内部保存的字节数组。现在性能取决于你是否要在y上进行扫描我们的表?如果是,则在您使用协处理器之前,扫描速度会很慢。如果不是,则无论您的设计是什么,无论您的表中有多少数据,Get和Put方法都将提供恒定的性能。您可以解释如何使用协处理器来避免扫描吗?协处理器不会避免扫描,它们是进行扫描的一种方式。Copr处理器以这样的方式并行HBase扫描:数据扫描和聚合发生在数据节点而不是客户端。然后每个节点将其数据子集返回给客户端,然后再次组合和聚合以输出最终结果。搜索用于执行此操作的端点协处理器。扫描发生在每个节点,除非您指定starkey和endkey,否则它将在其中命中找到该键的特定节点区域,因此它将扫描一个或两个节点(如果您的键范围分布在多个节点上)…所有其他扫描(使用过滤器)是全表扫描UNITL它击中键,所以它可以击中所有节点…协处理器帮助这里是什么我想了解。我需要考虑响应时间前缀扫描。