主管交给我一个算法问题,我想了很久也搞不定,
问题是这样的:
用户从系统里下载一个种子短信,由(message_id)标识,下载以后,如果转发给别人,他就可以得到5分的积分,如果这个短信又被接收人转发,他又可以得到2分,不过它只能得到4代的转发积分,也就是说它是一棵树的根,他前3代孩子接收到由它最初转发的短信然后再转发他都可以拿到积分。同时,无论谁接收到此段信,转发后都可以得到5分,同理,如果再被接收人转发,他也可以得到它以下4带给他的积分。
当然,同样的(messge_id)的短信发给同一个人,时间排在前面的那个才算数(send_time)
系统里的种子短信很多,也就是(message_id)很多,同时,用户发的每条转发短信都是一条数据项。数据量非常大(每条短信都有一个status,1代表处理过,0代表为处理),原来的算法是抽取时间大于现在时间-48的所有短信(这些段信才算稳定),把它们的MESSAG_ID 抽出来,每个message_id下都有很多短信,
把所有message_id存在一个队列里,一次抽取一个,然后把这个message_id下的短信全抽出来,由一个线程来处理,最多可以有20个线程,如果已经有20个线程在处理了,下一个message_id就只有等有线程结束了才能开始。线程抽取数据的时候是从数据库里抽取message_id = :message_id,然后按发送时间排序的信息的,现在的问题就是建树的算法确定了,可是在抽取所有message_id和抽取每个message_id下的短信(按时间排好序)时,花的系统时间太大,非常慢,大家有什么好意见啊??
问题是这样的:
用户从系统里下载一个种子短信,由(message_id)标识,下载以后,如果转发给别人,他就可以得到5分的积分,如果这个短信又被接收人转发,他又可以得到2分,不过它只能得到4代的转发积分,也就是说它是一棵树的根,他前3代孩子接收到由它最初转发的短信然后再转发他都可以拿到积分。同时,无论谁接收到此段信,转发后都可以得到5分,同理,如果再被接收人转发,他也可以得到它以下4带给他的积分。
当然,同样的(messge_id)的短信发给同一个人,时间排在前面的那个才算数(send_time)
系统里的种子短信很多,也就是(message_id)很多,同时,用户发的每条转发短信都是一条数据项。数据量非常大(每条短信都有一个status,1代表处理过,0代表为处理),原来的算法是抽取时间大于现在时间-48的所有短信(这些段信才算稳定),把它们的MESSAG_ID 抽出来,每个message_id下都有很多短信,
把所有message_id存在一个队列里,一次抽取一个,然后把这个message_id下的短信全抽出来,由一个线程来处理,最多可以有20个线程,如果已经有20个线程在处理了,下一个message_id就只有等有线程结束了才能开始。线程抽取数据的时候是从数据库里抽取message_id = :message_id,然后按发送时间排序的信息的,现在的问题就是建树的算法确定了,可是在抽取所有message_id和抽取每个message_id下的短信(按时间排好序)时,花的系统时间太大,非常慢,大家有什么好意见啊??
解决方案 »
- InstallShield2008 检测是否已安装程序问题
- 请问各位大虾一个关于DELEGATE委托的问题啊。谢谢啦
- 共享一个功能非常齐全的酒店管理系统,大家帮我看下这个数据库是怎么连接的
- C#新手求助,希望能帮小弟偶解决下下面这个怪问题
- 求助
- 关于线程访问主进程中控件的问题
- 问个WindowsApplication下的DataSet的问题--手太次,别要耻笑
- 一保存就提示ORA-01747错误,无效的用户,表,列,大家帮我看看哪里有问题
- 有哪些大公司或者大项目的ORM使用NHibernate?
- 请教一个“弱智”问题!
- 问个弱智问题。。。。。
- [求助]Response.Redirect的简单问题问题
如楼上的