Hadoop 嵌套HBase实体中的高效搜索

Hadoop 嵌套HBase实体中的高效搜索,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,如果我在同一个HBase实体中跟踪并存储一组嵌套实体(以受益于HBase的单行ACID属性),是否可以高效地搜索这些嵌套实体,甚至使用MapReduce来决定是否使用特定标准选择封装(父)实体 例如,我有一个客户实体,其中嵌套了订单实体 CustomerInfo和Orders是列族。 对于orders列系列(这里很有意思),1、2…6是列名(在HBase中是动态的,可以动态添加),它们旁边的文本是订单实体详细信息(我将这些详细信息序列化为文本,但序列化并不重要,因为HBase不在乎) 如果我有

如果我在同一个HBase实体中跟踪并存储一组嵌套实体(以受益于HBase的单行ACID属性),是否可以高效地搜索这些嵌套实体,甚至使用MapReduce来决定是否使用特定标准选择封装(父)实体

例如,我有一个客户实体,其中嵌套了订单实体

CustomerInfoOrders是列族。 对于orders列系列(这里很有意思),1、2…6是列名(在HBase中是动态的,可以动态添加),它们旁边的文本是订单实体详细信息(我将这些详细信息序列化为文本,但序列化并不重要,因为HBase不在乎)

如果我有很多像这个客户实体这样的实体(更多细节见下文第3节)

  • 是否可以基于MapReduce(仅地图?)方法或任何其他高效方法选择客户实体,扫描客户实体,读取这些客户实体内的客户订单值,并仅返回包含特定标准订单的客户实体(例如,成本>40)

  • 类似地,是否可以返回符合指定条件(成本>40)的订单实体以及客户实体,以显示客户及其最昂贵的订单

  • 如果每个客户的订单数量非常大(高达100000),并且客户数量也很大(高达100000),那么此选择操作是否可以相当快地进行(不到一秒钟)?假设我可以为此构建一个非常大的HBase集群(根据需要)

  • 由于我认为3)是不可能的(因为一个MapReduce工作人员必须处理那100000个序列化订单),对于这个问题(根据订单属性快速选择客户)有什么更好的设计?将客户实体反规范化为包含客户信息的订单实体是更好的方法吗

  • 是否可以基于MapReduce选择客户实体 (仅地图?)方法或任何其他有效的扫描方法 客户实体,读取这些实体中的客户订单值 客户实体,并仅返回 是否包含具有特定标准的订单(例如,成本>40)
  • 类似地,是否可以返回 与客户一起匹配指定的标准(成本>40) 显示客户及其最昂贵订单的实体
  • 基于MapReduce方法选择实体当然是可能的,因为映射可以处理行键中的所有数据,然后可以解析数据、过滤所需内容,并仅写入所需数据

  • 此选择操作是否可以相当快地进行(小于 一秒钟?)如果每个客户的订单数量非常大(最多 100000)并且客户数量也很大(高达100000)? 假设我可以构建一个非常大的HBase集群(如图所示) (需要)为此
  • 我不认为MapReduce是为动态过程设计的,因为它更适合批处理。你可以试着用它

  • 因为我认为3)是不可能的(作为一个单一的MapReduce 工人必须处理100000份序列化订单), 对于这个问题,什么样的设计更好(选择 基于订单属性的客户(快速)?将 将客户实体反规范化为订单实体,包括 客户信息是更好的方法吗
  • 您可以更改设计以利用HBase扫描过程及其过滤器。而不是
    1:“项目A;成本:$12”

    你可以试试
    1-ItemA:“12”


    项目A-1:“12”

    或者可以将值存储在整数字节而不是字符串中,这样您就可以使用scan with根据需要过滤返回的结果

    或者,您可以尝试多层体系结构,其中有用于处理的数据表和用于实时访问的聚合表