我正在尝试创建java应用程序,将mysql数据库转换为nosql hbase数据库。到目前为止,它从mysql读取数据并正确地插入hbase但现在我正在尝试处理mysql的表之间的关系,我知道如果有关系,您应该添加一个表作为超级列族。我查了一个网站的文档,什么也没找到。有什么想法吗?
pqwbnv8z1#
列族与关系无关。相反,您必须通过行键设计正确地创建反向索引,这样可以通过从一个表中知道键来有效地从另一个表中检索数据。或者为了避免join,尝试将所有数据存储在一行中。任何为hbase提供sql接口的工具都会生成需要时间启动和执行的作业。hbase是快速的,如果你得到操作或扫描连续行。希望这有用。更新有关列族的更多详细信息,请参阅《构建hbase应用程序》一书列族是特定于hbase的概念,在其他rdbms应用程序中找不到。对于同一区域,不同的列族将数据存储到不同的文件中,并且可以进行不同的配置。具有相同访问模式和格式的数据应分组到同一列族中。作为关于格式的一个示例,如果除了每个客户的个人资料照片的图像文件之外,还需要存储客户个人资料的大量文本元数据信息,则可能需要将它们存储到两个不同的列族中:一个是压缩的(所有文本信息都将存储在其中),一个未压缩(图像文件将存储在其中)。作为访问模式的一个例子,如果一些信息大部分是读的,几乎从不写,而一些信息大部分是写的,几乎从不读,那么您可能需要将它们分为两个不同的列族。如果要存储的不同列具有相似的格式和访问模式,请将它们重新组合到同一列族中。给定区域服务器的写缓存内存区域由为给定主机承载的所有区域配置的所有列族共享。滥用列族会给memstore带来压力,memstore会生成许多小文件,而这些小文件又会生成许多压缩文件,这可能会影响性能。您可以为表配置的列族数量没有技术限制。然而,在过去三年中,我们有机会研究的大多数用例只需要一个列族。有些需要两列族,但每次我们看到超过两列族时,都有可能并建议减少数量以提高效率。如果您的设计包含三个以上的柱族,您可能需要更深入地研究它,看看是否所有这些族都是必需的;最有可能的是,他们可以重组。如果两个列族之间没有任何一致性约束,并且数据将在不同的时间到达这些列族,则也可以创建两个表,每个表都有一个列族,而不是为单个表创建两个列族。当需要决定区域的大小时,这种策略很有用。实际上,虽然最好保持两个列族的大小几乎相同,但通过将它们拆分到两个不同的表中,现在更容易让我独立增长。这个答案也很有用。
1条答案
按热度按时间pqwbnv8z1#
列族与关系无关。相反,您必须通过行键设计正确地创建反向索引,这样可以通过从一个表中知道键来有效地从另一个表中检索数据。或者为了避免join,尝试将所有数据存储在一行中。任何为hbase提供sql接口的工具都会生成需要时间启动和执行的作业。hbase是快速的,如果你得到操作或扫描连续行。希望这有用。
更新
有关列族的更多详细信息,请参阅《构建hbase应用程序》一书
列族是特定于hbase的概念,在其他rdbms应用程序中找不到。对于同一区域,不同的列族将数据存储到不同的文件中,并且可以进行不同的配置。具有相同访问模式和格式的数据应分组到同一列族中。作为关于格式的一个示例,如果除了每个客户的个人资料照片的图像文件之外,还需要存储客户个人资料的大量文本元数据信息,则可能需要将它们存储到两个不同的列族中:一个是压缩的(所有文本信息都将存储在其中),一个未压缩(图像文件将存储在其中)。作为访问模式的一个例子,如果一些信息大部分是读的,几乎从不写,而一些信息大部分是写的,几乎从不读,那么您可能需要将它们分为两个不同的列族。如果要存储的不同列具有相似的格式和访问模式,请将它们重新组合到同一列族中。给定区域服务器的写缓存内存区域由为给定主机承载的所有区域配置的所有列族共享。滥用列族会给memstore带来压力,memstore会生成许多小文件,而这些小文件又会生成许多压缩文件,这可能会影响性能。您可以为表配置的列族数量没有技术限制。然而,在过去三年中,我们有机会研究的大多数用例只需要一个列族。有些需要两列族,但每次我们看到超过两列族时,都有可能并建议减少数量以提高效率。如果您的设计包含三个以上的柱族,您可能需要更深入地研究它,看看是否所有这些族都是必需的;最有可能的是,他们可以重组。如果两个列族之间没有任何一致性约束,并且数据将在不同的时间到达这些列族,则也可以创建两个表,每个表都有一个列族,而不是为单个表创建两个列族。当需要决定区域的大小时,这种策略很有用。实际上,虽然最好保持两个列族的大小几乎相同,但通过将它们拆分到两个不同的表中,现在更容易让我独立增长。
这个答案也很有用。