模仿CSDN下载频道的功能

yuan_nice 2009-04-24 02:29:20
CSDN下载频道中下载后不在重复扣除积分的流程是怎么样的?
我也想做一个类似的下载就是下载之后不重复扣除积分,
但是不知道该怎么记录注册用户下载过的资源?数据表该怎么设计?

特在此求助!!!
...全文
169 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuan_nice 2009-04-27
  • 打赏
  • 举报
回复
挖,楼上好高手
smartcatiboy 2009-04-24
  • 打赏
  • 举报
回复
这种东西要达到高性能无法用asp做。

通常地做法是每个用户建立一个下载索引,以二进制的方式储存在用户表的一个记录里,用的时侯直接读到数组。

然后二分查找目标,发现就直接下,没有就扣分,重建索引。时间复杂度是log2(N),考虑就算疯子用户就算曾经下载过一百万个文件,也不过内存copy时间+30次查找比较,由于内存copy是由硬件做,所以几乎没有Cpu时间消耗。

但是asp不支持直接处理二进制,你先把二进制或者字符串必须解析到variant数组里,查找,然后再转换后放回去。想象用转换1M的文本字符串转换成到数组的时间吧。。。。。。

其实很多东西,比方多关键字搜索,输入首字自动提示这些,其实涉及到很复杂的数据结构和算法,用asp+access可以做个形似,但是一旦用户、并发稍多一些,会立刻出问题。作为新手要尽量避免这些华而不实的东西。

要简单再简单,asp卖的是网站构架和组织,不是算法和数据结构。


yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
哦,只能点击下载后就无悔了
xiaojing7 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yuan_nice 的回复:]
不过还有个问题就是,怎么判断一个资源被某个用户下载完了呢?
[/Quote]
=============
这个不需判断啊,只要用户下载过一次,以后下载就不扣分了。即使第一次没有下完,以后也不用扣分了!!!

但要实现第一次没有下完,以后不下载了,也不扣分,MS有点复杂。CSDN都没这样用


yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
恩,按15楼的方法那个SQL语句我暂时还不会写
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yuan_nice 的回复:]
不过还有个问题就是,怎么判断一个资源被某个用户下载完了呢?
[/Quote]

[Quote=引用 11 楼 yuan_nice 的回复:]
引用 8 楼 chinmo 的回复:
晕,
id uid tid
这样设计不就已经是分开的了
id 自动编码
uid int
tid int
普通的查询存在不存在即可


我要改的是个音乐网站,里面有2.5万的注册用户,有5万首下载的歌曲
这样这个表是不是太大了?一人4首歌就10万条记录
[/Quote]
lihan6415151528 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yuan_nice 的回复:]
引用 8 楼 chinmo 的回复:
晕,
id uid tid
这样设计不就已经是分开的了
id 自动编码
uid int
tid int
普通的查询存在不存在即可


我要改的是个音乐网站,里面有2.5万的注册用户,有5万首下载的歌曲
这样这个表是不是太大了?一人4首歌就10万条记录
[/Quote]

不行就写一个用户下载的字段,每下载一个新的资源,该字段以字符串形式加上该资源ID,以逗号或者什么区分开

之后就是SQL语句的事情了~
lihan6415151528 2009-04-24
  • 打赏
  • 举报
回复
用户下载一个资源之后检索一下数据库是否存在已经下载情况

建议用一个中间表
lyserver 2009-04-24
  • 打赏
  • 举报
回复
它不需要判断,不重复扣分就是防止资源下载失败给用户造成的损失。
ChinaXtHuLang 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chinmo 的回复:]
晕,
id uid tid
这样设计不就已经是分开的了
id 自动编码
uid int
tid int
普通的查询存在不存在即可
[/Quote]
恩。。。。YES
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chinmo 的回复:]
晕,
id uid tid
这样设计不就已经是分开的了
id 自动编码
uid int
tid int
普通的查询存在不存在即可
[/Quote]

我要改的是个音乐网站,里面有2.5万的注册用户,有5万首下载的歌曲
这样这个表是不是太大了?一人4首歌就10万条记录
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
不过还有个问题就是,怎么判断一个资源被某个用户下载完了呢?
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
哦,经你提醒突然反应过来,明白了
嘿嘿,反应有点迟钝
  • 打赏
  • 举报
回复
晕,
id uid tid
这样设计不就已经是分开的了
id 自动编码
uid int
tid int
普通的查询存在不存在即可
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
恩,应该是从数据库中读出追加再写入
关键是我不知道:怎么检索出当中的某一个?
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
那每个资源id怎么分开?
  • 打赏
  • 举报
回复
这个看你数据库设计了

有些是这么设计的
id uid tid

其中uid是用户id,tid是下载资源的id
yuan_nice 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiaojing7 的回复:]
用户下载,可以存一个编号在数据库中,例如下载后

SQL code
if not existes(select count(*) from table where id= '资源id')
begin
update table set integral=integral-5(该资源的分数) where userid='xxx'
end
[/Quote]


那个编号在数据库中怎么存储?
如果每个用户下载一个资源就把他下载过的资源号记录下来,那这个记录的资源号就有好多,因为
用户会下载很多资源,但是我不知道怎么为一个用户存储所有的资源号?最后也不会检索?
  • 打赏
  • 举报
回复
[Quote=引用楼主 yuan_nice 的帖子:]
CSDN下载频道中下载后不在重复扣除积分的流程是怎么样的?
我也想做一个类似的下载就是下载之后不重复扣除积分,
但是不知道该怎么记录注册用户下载过的资源?数据表该怎么设计?

特在此求助!!!
[/Quote]

设计一个表来存储下载过的附近即可

以前我再做DZ下载插件时就曾这么做过
xiaojing7 2009-04-24
  • 打赏
  • 举报
回复
用户下载,可以存一个编号在数据库中,例如下载后

if not existes(select count(*) from table where id= '资源id')
begin
update table set integral=integral-5(该资源的分数) where userid='xxx'
end
加载更多回复(1)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧