数据库 – 哪种DB计算每分钟的统计数据?

我有一个用例要求,我想设计一个hashtag排名系统.应该选择10个最流行的#标签.我的想法是这样的:

[hashtag,rateofhitsperminute,rateofhisper5minutes]

然后我将查询,找出10个最受欢迎的#hashtags,其每分钟的速率最高.

我的问题是,我可以使用哪种数据库来提供像’rateofhitsperminute’这样的统计数据?

计算这样一个细节和存储在db中的好方法是什么?有些DB提供这些功能吗?

解决方法

首先,计算“每分钟命中率”:
[hits during period]/[length of period]

因此,费率将根据期间的长短而有所不同. (最后一分钟?最后10分钟?自从点击开始被记录以来?首先使用了#标签?)

所以你真正想要存储的是命中数,而不是速率.最好是:

>在一段时间内存储主题标签及其命中数(需要更少的内存/ cpu但灵活性更低)
>或每个命中的时间戳和#标签(需要更多的内存/ cpu,但更灵活)

现在需要选择感兴趣的时间段,并查询数据库以查找在此期间内点击率最高的前10个主题标签.

如果您需要显示费率,请使用上面的公式,但请注意它不会更改顶部主题标签的顺序,因为每个主题标签的周期相同.

您可以将上述算法应用于几乎任何数据库.您甚至可以在不使用数据库的情况下执行此操作(只需使用编程语言的内置hashmap).

如果性能一个问题,并且会有许多不同的主题标签,我建议使用OLAP database. OLAP数据库是专门为这样的top-k查询(在一定时间段内)设计的.

话虽如此,这里是一个如何在Solr:Solr as an Analytics Platform中完成您的用例的示例.solr不是OLAP数据库,但此示例使用Solr像OLAP DB,似乎是最容易实现并适应您的用例:

您的Solr架构如下所示:

<fields>
 <field name="hashtag"  type="string"/>
 <field name="hit_date" type="date"/>
</fields>

示例文档将是:

{
 "hashtag": "java","hit_date": '2012-12-04T10:30:45Z'
}

您可以使用的查询是:

http://localhost:8983/solr/select?q=*:*&facet=true&facet.field=hashtag&facet.mincount=1&facet.limit=10&facet.range=hit_date&facet.range.end=2013-01-01T00:00:00Z&facet.range.start=2012-01-01T00:00:00

最后,这里有一些与此问题相关的高级资源:

>相似的问题:Implementing twitter and facebook like hashtags
> What is the best way to compute trending topics or tags?我从这些答案得到的一个有趣的想法是使用命中计数随时间的导数来计算“瞬时”命中率.
如果可以接受大致计算,则可以使用> HyperLogLog来估计命中计数.
>如果你想在这主题上获得真正的学术,请查看Sliding-Window Top-K.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...