hbase,相同结构的多个表或包含大量数据的单个表的性能更有效?

Posted

技术标签:

【中文标题】hbase,相同结构的多个表或包含大量数据的单个表的性能更有效?【英文标题】:what is more efficient in performance of hbase,multiple tables of same structure or a single table containing large set of data? 【发布时间】:2017-08-31 15:15:00 【问题描述】:

我之前创建了一个项目,将特定实体的每日数据存储在 RDMS 中,方法是为每天创建一个表,而不是将当天的数据存储在该表中。

但现在我想将我的数据库从 RDMS 转移到 HBase。所以我的问题是我是否应该创建一个表并将所有日期的数据存储在该表中,或者我应该使用我之前为每天创建一个单独的表的概念。我想根据 hbase 的性能比较这两种情况。

对不起,如果你觉得这个问题很愚蠢。谢谢

【问题讨论】:

想想你的表的结构。如果该行是时间戳,则会导致热点问题。 如果你的 rowkey 设计得很好,并且像 Natalia 提到的那样解决了问题,那么遵循你的 RDBMS 系统的设计就违背了 HBase 的全部目的。 好的,所以你想说我应该将我的整个数据输入到一个表中。 【参考方案1】:

正如你提到的,有两个选项


选项 1:所有日期数据的单个表 选项 2:多个表


如果您有大量的单日数据,我更喜欢使用选项 2 的命名空间(0.96 版中引入的一项非常重要的功能)。这也将支持多租户要求...

见Hbase Book

命名空间是表的逻辑分组,类似于关系数据库系统中的数据库。这种抽象为 即将推出的多租户相关功能:配额管理 (HBASE-8410) 限制命名空间可以消耗的资源量(即区域、表)。 命名空间安全管理 (HBASE-9206) - 为租户提供另一个级别的安全管理。 区域服务器组 (HBASE-6721) - 命名空间/表可以固定到 - RegionServers 的子集,从而保证课程级别 隔离。

以下是 w.r.t 的命令。命名空间

alter_namespace, create_namespace, describe_namespace, 
drop_namespace, list_namespace, list_namespace_tables

优势:

即使你使用列过滤器,由于它的数据较少(每天数据),与单表方法相比,全表扫描的数据检索速度会更快(大表全扫描成本高) 如果您想对特定表进行身份验证和授权,也可以实现。

限制:您最终会使用多个脚本来管理表格而不是单个脚本(选项 1)

注意:在上述任何选项中,您的 rowkey 设计对于更好的性能和防止热点非常有用。

更多详情请看hbase-series

【讨论】:

非常感谢,我得到了确切的答案。

以上是关于hbase,相同结构的多个表或包含大量数据的单个表的性能更有效?的主要内容,如果未能解决你的问题,请参考以下文章

将多个表映射到单个实体

列族

HBase

数据库的星型模型与雪花模型

数据库的星型模型与雪花模型

hbase - 如何在不删除表的情况下更改表结构