2010-05-11 72 views
1

从SQL Server背景来看,我是HBase的新手,但该技术看起来非常适合我们正在做的事情,成本绝对正确!HBase模式帮助

我需要保持日志条目列表通常我会在RDBS创建为:

创建表的日志 ( 用户ID INT,SITEID INT,页VARCHAR(50),日期SMALLDATETIME )

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

这是怎么翻译成HBase中没有“行键”并且相同的(SiteID,Page)可能会出现很多次的“映射”。我的第一个想法是UserID是一个行键,但我仍然不明白“列族”和其他术语,足以理解如何设置表来保存这个数据,其中一个UserID可以有很多(SiteID,Page ,日期)“行”。

任何方向感谢!

回答

0

一种方法是使复合排键调出你的用户ID的+ SITEID

设置表,以保持你想为一个给定的页面然而,许多日志条目,以及您的数据每次存储为新版本(如有必要,手动设置时间戳)。

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

你会因此有一个表的内容类似

Row    Page 

user1:site1  www.example.com/[email protected] 
       www.example.com/[email protected] 
       www.example.com/[email protected] 
       www.example.com/[email protected] 

user1:site2  blahblah 

user2:site1  etc... 

要对付你的两个例子请求:

为了找到所有用户行,你会做一个扫描(一定要设置MAXVERSION)从userx:0到userx + 1:0,然后解析出每个结果行的站点ID

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

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

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

为了更好地理解HBase的内部,Lars George's blog也很棒。

1

我的建议是给你的用户ID作为Rowkey,给任何单个列家庭为给多列家庭不必要的,只会增加采取寻求的时间,并给网站ID |日期作为列预选赛这样它始终是唯一的,并且该限定符的值将是您的页面

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 

`

希望工程!

1

Initialy只是把它看成

  • RowKey:预选赛:值,

代表 - 12_Aug_2013_00:00:* - 温度 = 24, - 湿度 = 15, - FileghtsDelayed = 17

  • RowKey:预选赛:值,
  • 12_Aug_2013_00:00:温度:24
  • 12_Aug_2013_00:00:湿度:15

现在,看起来更深邃,什么如果我们可以将限定词分组到列家庭中。

例如:

  • 让基,温度图,湿度,AirPresureWeatherDetails
  • 允许组,组* No_FileghtsDelayed *,* No_FlightsCancelled *,作为eventsConts

  • 我们有WeatherDetails,& eventsConts,作为栏f amilies

我们 - Date_Hour:WeatherDetails:EventDetails: 例如,用于记录可以表示为

  • 12_Aug_2013_00 12_Auguest_2013 FirstHour数据:00WeatherDetails - 温度 = 24,WeatherDetails - 湿度 = 15,事件Conts - FileghtsDelayed = 17

这种分组是优化读取操作。