在HBase中存储嵌套HashMap

在HBase中存储嵌套HashMap,hbase,bigtable,bigdata,Hbase,Bigtable,Bigdata,请原谅我的无知,但我对HBase相对较新,似乎无法理解。我想在HBase中存储以下嵌套哈希映射: Map<String, Map<String, Map<String, Double>>> Map 我似乎无法理解HBase表的模式 行索引显然是最外层映射中的字符串值。但是,我认为HBase不允许嵌套列族(尽管它允许每个列族包含任意数量的列) 从回答中,我还发现嵌套实体在HBase中不能有嵌套实体 要了解数据大小,请执行以下操作: 最里面的贴图(Map)将

请原谅我的无知,但我对HBase相对较新,似乎无法理解。我想在HBase中存储以下嵌套哈希映射:

Map<String, Map<String, Map<String, Double>>> 
Map
我似乎无法理解HBase表的模式

行索引显然是最外层映射中的字符串值。但是,我认为HBase不允许嵌套列族(尽管它允许每个列族包含任意数量的列)

从回答中,我还发现嵌套实体在HBase中不能有嵌套实体

要了解数据大小,请执行以下操作:

  • 最里面的贴图(
    Map
    )将只有3个键
  • 中间的地图(
    地图
    )将有大约 100把钥匙
  • 最外面的贴图(
    Map
    ) 可能有2000-3000万把钥匙
  • 感谢您的帮助

    编辑1: 基本上,我要存储的数量是特定productId的数量,即从特定仓库在地方、地区或国家层面上售出的数量

    • productId是最外层映射的键
    • 仓库ID是中间地图的关键
    • 本地/分区/国家是最内层地图的关键
    编辑2:
    数据将在映射作业中填充和读取。基本上,对于每个产品id,warehouseId x(本地/区域/国家:现在我们称之为saleType)数量是另一个操作所需的输入。我还考虑将productId x warehouseId x saleType粒度的数据存储在一个csv文件中,并从映射作业中读取它

    思考此问题的一种方法是(键1、键2、键3)->双映射。可以使用键、列族和限定符来描述结构。对于一个非常高的表,可以将键元组的所有3个部分作为一个串联的row_键,尽管这样做效果不太好


    你有多达90亿个元组。你对数据有很好的了解。从这里我要问的第一个问题是:“如何最经常地查询和访问数据?”如果要查找特定的值而不是集合,那么可能有90亿行是有意义的。如果通常情况下不是这样,那么您要查找单个外部键的所有内部数据,那么最外层的键作为行\键,以及(中间)\列(内部)作为列限定符可能会起作用。在后一种情况下,您可以使用带有正则表达式比较器的限定符过滤器来进一步过滤响应

    思考这个问题的一种方法是(键1、键2、键3)->双重映射。可以使用键、列族和限定符来描述结构。对于一个非常高的表,可以将键元组的所有3个部分作为一个串联的row_键,尽管这样做效果不太好


    你有多达90亿个元组。你对数据有很好的了解。从这里我要问的第一个问题是:“如何最经常地查询和访问数据?”如果要查找特定的值而不是集合,那么可能有90亿行是有意义的。如果通常情况下不是这样,那么您要查找单个外部键的所有内部数据,那么最外层的键作为行\键,以及(中间)\列(内部)作为列限定符可能会起作用。在后一种情况下,您可以使用带有正则表达式比较器的限定符过滤器来进一步过滤响应

    考虑到您的编辑,我将避免使用HBase(尽管我喜欢它)。似乎您不需要随机访问数据,在每次迭代中进行完整表扫描和完整表写入并不是HBase的最佳用途


    我假设您已经有了Hadoop集群。最好的选择可能是直接以HDFS(a或其他序列化格式)以平面格式存储数据。另外,我不确定您使用哪种工具,但我猜对于基本计数聚合,这将是一个简单的开始选项。

    鉴于您的编辑,我将避免使用HBase(尽管我喜欢它)。似乎您不需要随机访问数据,在每次迭代中进行完整表扫描和完整表写入并不是HBase的最佳用途


    我假设您已经有了Hadoop集群。最好的选择可能是直接以HDFS(a或其他序列化格式)以平面格式存储数据。另外,我不确定您使用的是哪种工具,但我猜对于基本计数聚合,这将是一个简单的开始选项)。

    据我所知,您的数据集大,分区范围广,还需要快速检索,因此您可以在HDF上使用格式。 它将为您提供具有分区和压缩支持的列式存储。
    您还可以通过任何其他框架(如spark、drill等)读取数据。

    据我所知,您的数据集很大,可以进行分区,还需要快速检索,因此您可以在HDFS上使用格式。 它将为您提供具有分区和压缩支持的列式存储。
    您还可以通过spark、drill等任何其他框架读取数据。

    stop!:)问题陈述是什么?您试图存储什么(嵌套的hashmap不会告诉我太多)?您的访问模式是什么?建议阅读(全部):上面的编辑有帮助吗?有帮助。现在,您打算如何读取数据?您希望哪种手术更常见?此外,到目前为止,您的数据还不算太大,您有没有探索过其他选择?我试图确定这是否“显然”是您的问题的根源……数据将在映射作业中填充和读取。基本上,对于每个产品id,warehouseId x(本地/区域/国家:现在我们称之为saleType)数量是另一个操作所需的输入。我还考虑将productId x warehouseId x saleType粒度的数据存储在一个csv文件中,并从映射作业中读取。我的想法是:如果您不需要随机访问,那么我可能会放入普通HDF…停止!:)问题陈述是什么?您试图存储什么(嵌套的hashmap不支持存储)