blog.programfan.info
新网站即将启用

[集]mapreduce使用小解

这样一个情况,在mnesia数据库下有这样一个表:{tab, {{netaddress, date}, num}}

[注:netaddress网站名;date是时间,单位是天,格式{year, month, day};num是指这个网站在这一天被访问的次数]

这儿的主键是{netaddress, date}, num是整型,代表这天这个网站被访问的次数,下面需求来了:

求{2011, 1, 1}到今天对应网站的总共访问次数?

步骤:取出数据表中,{2011,1,1}到今天的所有数据,把netaddress进行消重,并把对应的num的值相加

实现

1、取出所有数据List,格式{netaddress, num}

2、新增一个ets表, {key, value},其中key为网站名netaddress, value为进程id

3、对List中的每一条数据,按id为netaddress从ets表中查询,

    3.1如果没有这条记录,Pid = spawn("进程"), 并在ets表中插入数据{netaddress, Pid};

    3.2如果有这条记录,那么得到Pid, 并用 Pid ! {add, num}发送信息

    3.3如上操作直到List=:=[],从ets表中得到全部的列表List2, 分别对每一条记录做如下操作:

    如:记录{netaddress, Pid}, Pid ! {finished}, 发送数据后,spawn出来的进程会把它的状态(即这个网站在这段时间的访问次数)发回过来

    在主程序中有receive来接收spawn出来的数据,然后把它再放到另一个ets表中{netaddress, num},这儿的num是指这段时间内这个网站被访问的次数

posted @ 2011-01-19 15:43  Gordon Chao  Views(1561)  Comments(2Edit  收藏  举报
www.programfan.info
新网站即将启用