Hadoop Hbase排序效率

Hadoop Hbase排序效率,hadoop,hbase,Hadoop,Hbase,在我的Hbasetable中,我在第100行有一名员工Simon,在第4000行有另一名员工Simon。现在我想从Employee表中获取所有名为Simon的员工。行键是每个员工的SSN 我的问题是,如果我启动一个查询以获取所有名为Simon的员工,那么Hbase中的搜索效率如何。因为第一个名字simon在第100行,第二个名字simon在第4000行。要获得名为simon hbase的Employees,必须遍历所有表才能找到这个名字。在这种情况下,我们进行完整表扫描时,搜索效率如何 如果你必

在我的Hbasetable中,我在第100行有一名员工Simon,在第4000行有另一名员工Simon。现在我想从Employee表中获取所有名为Simon的员工。行键是每个员工的SSN


我的问题是,如果我启动一个查询以获取所有名为Simon的员工,那么Hbase中的搜索效率如何。因为第一个名字simon在第100行,第二个名字simon在第4000行。要获得名为simon hbase的Employees,必须遍历所有表才能找到这个名字。在这种情况下,我们进行完整表扫描时,搜索效率如何

如果你必须进行一次完整的表格扫描,那不是一个很好的解决方案。事实上,如果您有大量的行,这将是一个糟糕的解决方案

大多数关系数据库管理系统或SQL数据库解决这个问题的方法是创建索引。因为您使用的是NoSQL数据库,所以它不会自动为您创建索引

让我们看看如何手动创建索引,以便有效地适应特定类型的查询

假设您有一组实体S,其中S中的每个实体E都有一个唯一的键KE和一个属性值VE。进一步假设您的实体位于HBase表中,每行一个,每个实体E的行键为KE

S相对于V的索引是另一个表,通常有三种形式之一

索引表格1 假设VE对于每个实体E也是唯一的。那么S相对于V的索引是一个每行一个实体的表,其中该表具有行键VE和包含KE的列

要通过VE查找实体E,只需转到该行查找KE

如果属性值VE是唯一的,请使用此方法

设想一个员工实体表,其中每个员工在公司内都有一个唯一的EmployeeID,例如。主Employee表可以使用唯一的EmployeeID作为行键,Employee\u SSN\u索引可以使用同样唯一的Employee SSN number VE。这样可以通过SSN号快速查找员工

索引表格2 假设VE对于每个实体E可能不是唯一的;也就是说,可能存在重复项。那么S相对于V的索引是一个每行有一个实体的表,其中该表的行键为VE++KE

要查找带有VE的所有实体E,只需对以VE开头的行进行前缀扫描

当VE的长度不是固定的,并且可能无法区分VE的结束点和KE的开始点时,存在一种变体。行键中的VE和KE之间可以放置分隔符。例如VE++|++KE。在这种情况下,要扫描的前缀是VE++|

Employee\u Department\u索引表可以使用员工工作的部门ID作为属性值VE

索引表格3 假设VE对于每个实体E可能不是唯一的;也就是说,可能存在重复项。那么S相对于V的索引是一个表,每行有一组实体,其中该表的行键为VE,列族F带有限定符KE。也就是说,实体按属性值分组为行

要使用VE查找所有实体E,请抓取行VE,请求列族F中的所有列

这种方法实际上应该保持在索引每一行中的实体数量很少的情况下