HBase表设计用于维护每个来源的每小时访问者数量

时间:2015-03-28 14:42:07

标签: java hbase apache-storm

我正在开展一个项目,我必须报告每个来源的每小时唯一身份访问者。那就是我必须计算每小时每个来源的唯一访问者。访客通过唯一身份识别。设计应该是什么,以便计算每小时唯一访问者是有效的,因为数据是每8小时20k条目的数量。

目前我正在使用sourceid + visitorid作为行键。

1 个答案:

答案 0 :(得分:1)

让我们首先说每小时2500k条目的数据量相当低(甚至不是1 /秒)。除非您想要大规模扩展,否则您可以使用单个SQL服务器轻松实现项目。

无论如何,您有两个选择:

1。非实时

记录每个访问者+源并运行一个作业(如mapreduce),每小时或每天分析数据,具体取决于您的需求。在这种情况下,您甚至可以完全避免使用hbase并坚持使用hadoop。您可以每小时将数据记录到不同的文件,然后处理它并将结果存储在SQL中(如果您愿意,也可以存储在HBase中)。性能方面,这将是最好的方法。

2。实时

通过使用HBase计数器实时跟踪数据,在这种情况下,我考虑使用2个表:

  • unique_users :跟踪访问者访问该网站的最后时间(rowkey将是visitorid + source或者只是visitorid,具体取决于访问者ID是否可以拥有不同的来源或仅一)。如果你想尽快自动丢弃旧数据,这个表可以有3600秒的TTL,但我会让你有几天的数据。

  • date_source_stats :跟踪每小时每个来源的唯一访客数。根据您的保留要求,此表的TTL可能为几周甚至几年。

当访问者进入您的网站时,您会阅读 unique_users 表以检查上次访问日期,如果该日期超过1小时,则将其视为新访问,并将日期+小时的计数器增加 date_source_stats 表中的+ sourceid组合。然后,更新 unique_users 以将上次访问时间设置为当前时间。

这样,您可以通过扫描轻松检索特定日期+小时的所有唯一身份访问,并获取所有来源。您还可以考虑 source_date_stats 表,以防您想要对特定来源执行查询,即X源的最近7天的每小时报告...(您甚至可以存储所有统计数据)使用不同的rowkeys来表示同一个表。)

  

请注意这个方法的一些事项:

     
      
  • 我没有太详细的模式,如果你需要我,请告诉我。
  •   
  • 我还会将总访问量存储在另一个计数器中(无论它是否唯一,都会一直增加),这是一个   有用的价值。
  •   
  • 您可以轻松扩展此提案,以便跟踪每日,每周甚至每月唯一身份访问者,您只需   需要更多的计数器和rowkeys:date + sourceid,month + sourceid ...在这种情况下,您可以拥有多个具有不同TTL属性的列族来调整每个集的保留策略。
  •   
  • 如果您每秒有数千个req,则此提案可能会遇到热点问题,因为rowkeys是顺序的,您可以阅读更多   关于它here
  •   
  • date_source_stats 的另一种方法是选择一种广泛的设计,在该设计中,您只有一个sourceid作为rowkey,而date_hour作为列。
  •