我想使用hbase作为我的应用程序的数据库。我有一个有多列的表。我现在需要决定应该使用多少列族,一个或多个。如果不止一个,会有哪些优点和缺点。
hfsqlsce1#
官方的hbase指南中已经记录了这一点,请看粗体的声明:关于柱族的个数hbase目前不能很好地处理两个或三个以上的列族,因此请在模式中保持较低的列族数。目前,刷新和压缩是在每个区域的基础上进行的,因此,如果一个列族携带了大量的数据进行刷新,则相邻的族也将被刷新,尽管它们携带的数据量很小。当有许多列族时,刷新和压缩交互会导致一系列不必要的i/o加载(通过将刷新和压缩更改为在每个列族的基础上工作来解决)。有关压缩的详细信息,请参见压缩。如果可以的话,试着在模式中使用一个列族。仅在数据访问通常是列范围的情况下引入第二列和第三列族;i、 e.查询一个列族或另一个列族,但通常不能同时查询两个列族。33.1. 列族基数如果单个表中存在多个columnfamilies,请注意基数(即行数)。如果columnfamilya有100万行,columnfamilyb有10亿行,columnfamilya的数据可能会分布在许多地区(和RegionServer)。这使得大规模扫描柱状细胞的效率降低。一个很好的例子是有一个分析表,其中包含每日、每月、每年和总计列族,每个列都有自己的ttl设置(过期)和每个日期范围(天、月、年…)的列,它们是不同的范围,当您查询表时,通常一次只获取一种类型的聚合,例如:检索最近30天的每日统计数据如果您想了解更多关于模式设计的知识,请看amandepkhurana对hbase模式设计的精彩介绍
1条答案
按热度按时间hfsqlsce1#
官方的hbase指南中已经记录了这一点,请看粗体的声明:
关于柱族的个数
hbase目前不能很好地处理两个或三个以上的列族,因此请在模式中保持较低的列族数。目前,刷新和压缩是在每个区域的基础上进行的,因此,如果一个列族携带了大量的数据进行刷新,则相邻的族也将被刷新,尽管它们携带的数据量很小。当有许多列族时,刷新和压缩交互会导致一系列不必要的i/o加载(通过将刷新和压缩更改为在每个列族的基础上工作来解决)。有关压缩的详细信息,请参见压缩。
如果可以的话,试着在模式中使用一个列族。仅在数据访问通常是列范围的情况下引入第二列和第三列族;i、 e.查询一个列族或另一个列族,但通常不能同时查询两个列族。
33.1. 列族基数
如果单个表中存在多个columnfamilies,请注意基数(即行数)。如果columnfamilya有100万行,columnfamilyb有10亿行,columnfamilya的数据可能会分布在许多地区(和RegionServer)。这使得大规模扫描柱状细胞的效率降低。
一个很好的例子是有一个分析表,其中包含每日、每月、每年和总计列族,每个列都有自己的ttl设置(过期)和每个日期范围(天、月、年…)的列,它们是不同的范围,当您查询表时,通常一次只获取一种类型的聚合,例如:检索最近30天的每日统计数据
如果您想了解更多关于模式设计的知识,请看amandepkhurana对hbase模式设计的精彩介绍