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