HBase架构帮助

HBase架构帮助,hbase,Hbase,来自SQL Server的背景,我对HBase是个新手,但这项技术看起来非常适合我们正在做的事情,而且成本绝对合理 我需要维护一个日志条目列表,通常我会在RDB中创建该列表,如下所示: 创建表日志 ( UserID int,SiteID int,Page varchar(50),Date smalldatetime ) 其中一个用户在此简单表中可能有0或1000行。典型的查询是查找一个用户的所有行或一个站点上一个用户的所有行 在HBase中,如果没有“行键”,并且相同的(站点ID、页面)可能会多

来自SQL Server的背景,我对HBase是个新手,但这项技术看起来非常适合我们正在做的事情,而且成本绝对合理

我需要维护一个日志条目列表,通常我会在RDB中创建该列表,如下所示:

创建表日志 ( UserID int,SiteID int,Page varchar(50),Date smalldatetime )

其中一个用户在此简单表中可能有0或1000行。典型的查询是查找一个用户的所有行或一个站点上一个用户的所有行

在HBase中,如果没有“行键”,并且相同的(站点ID、页面)可能会多次出现,那么如何将其转换为“映射”呢。我的第一个想法是UserID是一个行键,但我仍然不太理解“列族”和其他术语,不足以理解如何设置表来保存一个UserID可以有许多(SiteID、Page、Date)“行”的数据


任何方向都是感激的

一种方法是使用userid+siteid生成复合行键

设置该表以维护给定页面所需的任意多个日志条目,并每次将数据存储为新版本(如有必要,手动设置时间戳)

由于HBase为每个单元维护时间戳,因此访问时间不需要单独的列

因此,您将有一个包含以下内容的表

Row             Page

user1:site1     www.example.com/index.html@1234567890
                www.example.com/somepage.html@123456800
                www.example.com/someotherpage.html@123456900
                www.example.com/index.html@123457123

user1:site2     blahblah

user2:site1     etc...
要处理您的两个示例请求:

要查找所有用户行,您需要执行从userx:0到userx+1:0的扫描(确保设置maxVersion),然后从每个结果行解析出站点ID

要获取特定用户/站点的所有页面,只需从userx:sitex扫描到userx:sitex+1。上次我检查了不能在get上设置maxVersions,所以这不是一个选项

简单地说,列族表示要存储在一起的数据组。。。 想必您会经常同时从它们读取数据。将列放置在单独的族中会导致数据被单独存储,因此当您只需要一列时,可以获得更快的读取速度,但需要读取两个不同的位置才能获得两列

当然,根据您的其他需求,您可能需要采取不同的方法。我强烈建议阅读bigtable的文章,以便更好地理解HBase的结构(因为它是基于bigtable的)


为了更好地理解HBase的内部结构,这也很好

我的建议是给你的用户ID作为行键,给任何一个单列族,因为给多个不必要的列族只会增加搜索时间,并将siteId | date作为列限定符,以便它始终是唯一的,并且该限定符的值将是您的页面

RowKey Qualifier                       Value

001    C:site001|25/01/2013:6:17:17    www.example123.com/home
001    C:site001|25/01/2013:6:17:18    www.example123.com/about
001    C:site002|25/01/2013:6:30:17    www.example1123.com/
001    C:site003|25/01/2013:6:32:18    www.example1123.com/contact
002    C:site001|25/01/2013:2:22:17    www.example123.com/home
003    C:site001|25/01/2013:3:12:18    www.example123.com/about
003    C:site003|25/01/2013:5:30:17    www.example1223.com/
003    C:site004|25/01/2013:6:32:18    www.exampleABC.com/contact
`


希望它能起作用

一开始只需将其视为

  • 行键:限定符:值
代表-2013年8月12日00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00

  • 行键:限定符:值
  • 2013年8月12日00:00:温度:24
  • 2013年8月12日00:00:湿度:15

现在,看得更深入一点,如果我们可以将限定符分组到一个列族中呢

例如:

  • 让组、温度、湿度、空气重新显示为天气详情
  • 让组、组*无文件显示*、*无飞行扫描单元格*,作为事件控件

  • 我们有WeatherDetails和eventsConts,如列系列

我们有-日期和时间:天气详情:事件详情: 例如,对于2013年8月12日,记录的第一小时数据可以表示为

  • 2013年8月12日00:00天气详情-温度=24,天气详情-湿度=15,事件内容-文件显示=17
此分组用于优化提取操作