论坛首页 Java版 设计模式

海量数据统计的方法?

浏览 13025 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
最后更新时间:2008-07-18
我们算法非常简单:
1. 用数组存储数据.
2. 根据整数key取模,然后把模作为数组下标
3. 访问数组中下标的数据.
这种做法有一定的局限性.希望对你有帮助!
   
0 请登录后投票
最后更新时间:2008-07-18
form_rr 写道
我们算法非常简单:
1. 用数组存储数据.
2. 根据整数key取模,然后把模作为数组下标
3. 访问数组中下标的数据.
这种做法有一定的局限性.希望对你有帮助!


谢谢,我试试。
   
0 请登录后投票
最后更新时间:2008-07-18
hash算法应该说是超级无敌的快(取决于它的码算法)
优化hashcode的算法
   
0 请登录后投票
最后更新时间:2008-07-18
quhuan1 写道
form_rr 写道
我们算法非常简单:
1. 用数组存储数据.
2. 根据整数key取模,然后把模作为数组下标
3. 访问数组中下标的数据.
这种做法有一定的局限性.希望对你有帮助!


谢谢,我试试。


从lz回答 "form_rr的答复" 来看, 搂住的数据量怎么算是海量?按照form_rr的做法,有一点是肯定的。那就是这些统计信息能放到内存中。既然如此谈和海量? 搞得大家还提出各种方案,比方:倒排索引,bdb等。
明显的误导人家啊。
   
0 请登录后投票
最后更新时间:2008-07-18
RyanPoy 写道
quhuan1 写道
form_rr 写道
我们算法非常简单:
1. 用数组存储数据.
2. 根据整数key取模,然后把模作为数组下标
3. 访问数组中下标的数据.
这种做法有一定的局限性.希望对你有帮助!


谢谢,我试试。


从lz回答 "form_rr的答复" 来看, 搂住的数据量怎么算是海量?按照form_rr的做法,有一点是肯定的。那就是这些统计信息能放到内存中。既然如此谈和海量? 搞得大家还提出各种方案,比方:倒排索引,bdb等。
明显的误导人家啊。


不是这个意思了,为了最快的速度,我必须对需要统计的字段做缓存,数据被分散到不同的节点,现在是对单个节点做优化。
   
0 请登录后投票
最后更新时间:2008-07-24
楼主你都没个量化指标,想达到什么样的目标,每秒处理多少数据,这还谈什么优化呢?
   
2 请登录后投票
最后更新时间:2008-07-18
dennis_zane 写道
楼主你都没个量化指标,想达到什么样的目标,每秒处理多少数据,这还谈什么优化呢?


越快越好,如果一个节点300W数据,单字段统计在0.5秒内,两个字段交叉统计2秒内(单节点而言)。
   
0 请登录后投票
最后更新时间:2008-07-19
建议用hashmap建立二叉树,这样就类似于实现了数据库中的索引功能,查询起来肯定相当快。
   
0 请登录后投票
最后更新时间:2008-07-19
quhuan1 写道
举个例子,我现在有海量的数据(以词为例),我想统计每个词各自出现的次数,不知道用什么方法或结构速度最快。

谢谢各位的回复了,可能我没说清楚吧。

我举个例子,我对某些文章建立了索引(绝对海量数据),现在搜索一个词“computer”,会返回相关文章,这个很简单,现在要做的是统计返回的文章中所有的文章作者各自发表了多少文章。。。。。。。


相当数据库里的select count 。。group by author,300W只是一个节点的测试数据。

我理解的是,你既然有了索引,那么在索引里应该有相应的文档编号。在建立索引的过程中,就已经可以统计出每个单词各自出现的次数并保存下来,在查询时,这应该不是问题。
那问题就是:搜索出“computer”的文章时,要找出搜索结果里的所有作者?
按照倒排序的方式,可以在建立索引时统计出每个作者所对应的文档编号,存储为BitSet,每一位对应到文档的一个编号。
在你搜索出的结果里,最初返回的应该是一个文档编号或者也可以是BitSet。
然后把所有作者的BitSet与搜索结果作and,然后你直接检查结果是否为空,就可以判断出搜索结果里是否包含这位作者。这里全是简单的运算,作者数量也不可能无穷大,所以应该很快。然后你再根据这些作者名字,直接查询到对应的文章数量。
假设你共有8篇文章,有5个作者分别是A、B、C
你的索引结构可能是这样:
computer:[00100110]
otherwords:[01001000]
A:[01100000]
B:[10000001]
C:[00011110]
现在所做的无非就是把computer分别与A、B、C作and,最后得出搜索“computer”中的作者有
A、C
他们的文章数量分别是2和4

不知道我是否理解正确了
   
0 请登录后投票
最后更新时间:2008-07-19
楼上的算法和PageRank的算法很像啊。

不过仔细想想楼主的需求和PageRank算法的需求其实是一样的,就看楼主的数据量了。粗略算下,如果有1亿文章,则每一个作者需要的空间是10,000,000/8/1024/1024=11.9M,有1千万作者就差不多是12万G了,比较恐怖,呵呵。
   
0 请登录后投票
论坛首页 Java版 设计模式

跳转论坛:
JavaEye推荐