1

我的字典里有 100 万个单词。每当用户在我的网站上发出查询时,我都会查看查询是否包含我的字典中的单词,并分别增加与它们对应的计数器。下面是一个例子,假设用户输入“奥巴马是总统”并且“奥巴马”和“总统”在我的字典中,那么我应该将“奥巴马”和“总统”的计数器加 1。

有时,我想查看前 100 个单词(查询最多的单词)。如果我使用 Hbase 来存储计数器,我应该使用什么模式?- 我还没有想出一个有效的。

如果我将字典中的单词用作行键,将“计数器”用作列键,那么更新计数器(增量)非常有效。但是很难排序并返回前 100 名。

任何人都可以给一个好的建议吗?谢谢。

4

3 回答 3

1

您可以使用自然模式(行键作为单词,列作为计数)并使用 IHBase 获取计数列的二级索引。有关初始实施,请参见https://issues.apache.org/jira/browse/HBASE-2037;当前代码位于http://github.com/ykulbak/ihbase

于 2010-06-04T04:43:12.063 回答
0

Adob​​e 在 HBaseCon 2012 的演示文稿(特别是幻灯片 28)中,我建议使用两个表和这种数据结构作为行键:

姓名

President => 1000
Test => 900

数数

429461296:President => dummyvalue
429461396:Test => dummyvalue

第二个表的行键是使用 Long.MAX_VALUE 派生的 - 在那个时间点计数。

当您获得新单词时,只需将“count:word”作为行键添加到计数表中。这样,当您扫描表格时,您总是首先返回最重要的单词。

于 2012-09-11T20:16:46.890 回答
-1

对 1M 长的排序可以在内存中完成,那又如何呢?

将在时间 t 发布的单词 x,y,z 作为 key:t cols:word:x=1 word:y=1 word:z=1 存储在表中。然后使用 MapRed 作业来汇总单词计数并获得前 100 名。

这也使进一步分析成为可能。

于 2010-06-13T20:28:49.877 回答