显示出来8个就行!
而且要实时的现实数据!
我需要怎么做!
我个人认为这个问题看似简单其实不简单!
因为如果有百万人浏览百万个商品,那要怎么记录这个数据?
或者不记录,那应该咋们处理呢?
166 个解决方案
#1
我试图通过当客户每浏览一个就往数据库或者文件写入一次的办法,但是都不行!考虑到性能和速度!
#2
首先你得有个浏览记录表:
主键(id)
商品ID(s_id)
用户ID(u_id)
浏览时间...等参数
显示8条这个不难吧? 不用说了吧 直接select top(8) from 浏览表 order by 浏览时间 desc 取出最新的8条
至于你的实时显示这个好像很少有网站这样做 迅雷在线影视有个你观看记录也不是实时的 对以http协议要实现实时可能性能会消耗
如果你非得做可以考虑一下dwr的方向ajax和用ajax定时去刷新浏览记录
至于你说你有上百万记录 这个你得考虑做数据库和程序的集群了!
主键(id)
商品ID(s_id)
用户ID(u_id)
浏览时间...等参数
显示8条这个不难吧? 不用说了吧 直接select top(8) from 浏览表 order by 浏览时间 desc 取出最新的8条
至于你的实时显示这个好像很少有网站这样做 迅雷在线影视有个你观看记录也不是实时的 对以http协议要实现实时可能性能会消耗
如果你非得做可以考虑一下dwr的方向ajax和用ajax定时去刷新浏览记录
至于你说你有上百万记录 这个你得考虑做数据库和程序的集群了!
#3
up!!~
#4
这个放入session中不行吗?
跟购物车很像,可以先创建一个空的购物车,每浏览一页就自动把商品放入到此购物车中,并且取session中的值。
如果重复,你判断一下,该怎么显示。
跟购物车很像,可以先创建一个空的购物车,每浏览一页就自动把商品放入到此购物车中,并且取session中的值。
如果重复,你判断一下,该怎么显示。
#5
用ArrayList装载客户浏览的商品
把ArrayList放到session中
愚见
不知道是否可行
把ArrayList放到session中
愚见
不知道是否可行
#6
我觉得可以放入到session中
#7
放在服务器端就用session,放在客户端就用cookie
#8
#9
我也是想到了Session,只有8个商品,数据量又不大,没必要走到数据库层
#10
2楼的方案还可行,用session不太好吧。估计你的频繁操作session。
#11
二楼朋友:
应该是
商品主键对应商品主键吧!
关系是1个对应8个的。
因为是浏览过这个商品的所有用户还浏览过那些商品!
所以是商品底下显示的是商品!
如果插入数据库,那将是一个庞大的数据流!
例如有商品 1, 2, 3,4,5,6,7,8,9
有一个用户把这九个都浏览了!
商品1到9的每个页面上应该显示
于自己不同的其他8个
我说的百万有些夸大了!呵呵!
应该是
商品主键对应商品主键吧!
关系是1个对应8个的。
因为是浏览过这个商品的所有用户还浏览过那些商品!
所以是商品底下显示的是商品!
如果插入数据库,那将是一个庞大的数据流!
例如有商品 1, 2, 3,4,5,6,7,8,9
有一个用户把这九个都浏览了!
商品1到9的每个页面上应该显示
于自己不同的其他8个
我说的百万有些夸大了!呵呵!
#12
那就走cookie吧
#13
我仔细考虑了一下不管是数据库还是session 都很消耗资源!
我想到当用户session创建了以后就开始记录他浏览过的商品,
只记录商品ID然后当session销毁的时候把这些ID再进行整理进行物理存储
我想到当用户session创建了以后就开始记录他浏览过的商品,
只记录商品ID然后当session销毁的时候把这些ID再进行整理进行物理存储
#14
cookie 是客户端的!这个貌似行不通!
数据要保留在服务端的!
这样方便下一个用户一进来就很直观的能看到这个商品
底下的一些商品!
我刚才说的那个方法现在还是存在问题!呵呵!
这个问题是个弯弯绕的问题!
看来大家这么有热情我这就去给帖子加分!
数据要保留在服务端的!
这样方便下一个用户一进来就很直观的能看到这个商品
底下的一些商品!
我刚才说的那个方法现在还是存在问题!呵呵!
这个问题是个弯弯绕的问题!
看来大家这么有热情我这就去给帖子加分!
#15
不好意思!
呵呵
发帖一天后太刻意加分的!
#16
你只显示8条。那就按浏览时间排序最近的8条吧,那么表中只保留一段时间数据就足够了
#17
我觉得用这种方式用cookie在客户端先记录好当前浏览了哪些产品,以及次数
在退出你网站的时候把客户端cookie存的数据返回服务器并消灭当前cookie
服务端创建session对象获取用户传过来的商品ID+次数
隔一定的时间来执行sql语句更新数据库
服务端你产品表里面搞张对应表 增加个字段
这样做对服务端应该说压力不大
在退出你网站的时候把客户端cookie存的数据返回服务器并消灭当前cookie
服务端创建session对象获取用户传过来的商品ID+次数
隔一定的时间来执行sql语句更新数据库
服务端你产品表里面搞张对应表 增加个字段
这样做对服务端应该说压力不大
#18
没必要做时时交互,可以半自动呵呵
#19
关注
#20
用session.
#21
如果通过数据库的话 那么只能在该商品表里加个关联表 记录该商品的友好商品信息 当然 友好商品信息是随时可以更换的(根据用户的浏览)
LZ想要实时的数据 那样的话貌似每个用户来都得进行一次记录 那么 说下我的个人建议吧:
一个商品对应16个友好商品 关联表的字段只有两个 一个是友好商品的ID 一个是该友好商品的点击次数 排序根据点击次数排出前8条记录显示在前台 至于剩下那八条 则是为了让该商品动态的替换而留的 每次有一个浏览过该商品又浏览了其他商品的情况出现 都会进行更新(正常情况下商品表里最好也加个查看次数) 如果两条友好商品的查看次数都是1 那我们根据该商品的查看次数决定他的去留(不是在关联表里的查看次数 而是商品表的查看次数 这里LZ也可以适当的变通一下 比如 根据时间比较 或者是其他的什么)
-------------------------------------------------------------------------------------------------------------
第二种方案(如果您能看到这里那我很感激你...)
这个方案实际上很简单 效率上也很好 就是每个商品加一个类别和一个点击查看次数 每点商品一次就增加查看次数一次 友好商品列表里就输出前8个 或者 根据你所点的商品的点击次数 来获得友好商品的点击次数(比如该商品点击次数为5 那么可以根据5来获得一个范围 就点击次数5到10的 因为一般点击次数比较少的话 说明曾经有个用户浏览了所有的商品...当然 猜测而已)
用这个方法最大的好处就是效率 而且比较好实现(虽然看起来只是获得点击次数高的商品记录...但是如果用范围的获取方法 那么效果说不定会有些...)
累死偶咯 偶的回答如果帮不上您的忙的话.... 总之 我尽力了 后面的帮顶啊!
#22
另外 如果不想通过更新数据库的方式来获得的话 还有一种办法 就是appliaction 当用户点击某样商品的时候 同时更新APPLIACTION里的关于该商品的点击信息(APPLIACTION里放该商品的类别和点击次数) 这个方法也比较简单
#23
补充下: 所谓的用户我觉得只是一个不存在的东西 如果说LZ一定要坚持查看某些用户浏览过的商品的话 那么每个商品难道都要加个最近浏览用户的表表? 每个用户都有个最近浏览商品的表表?期待高人解答
#24
理解不了,不知道如何实现啊
#25
楼主没有给用户提供他近期浏览过的商品的情况吗 如果这样但就关联商品表恐怕不行吧 这个效果似乎和xunleikankan里面的一样
#26
就是和迅雷看看的那个“最近浏览过的大片”一个效果!
#27
!
#28
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
#29
21楼的朋友:
真是太感谢你了!
你说的很有道理!我尝试去做一下!
说不定会碰到一些新的问题!
还需要再来请教你!
说真的!这个问题真不简单那!
希望后来的朋友能提出更好的建议,和自己的见解!
期待中!!!
明天给该贴加分!!!
真是太感谢你了!
你说的很有道理!我尝试去做一下!
说不定会碰到一些新的问题!
还需要再来请教你!
说真的!这个问题真不简单那!
希望后来的朋友能提出更好的建议,和自己的见解!
期待中!!!
明天给该贴加分!!!
#30
学习下 我也不会 呵呵
#31
小弟的建議是使用DB
step 1.
開一個Table 紀錄 memberid和 bookid,
step 2.
寫一個SQL procedure 一天跑一次
ex.
insert into book_browser(memberid, bookid, cnt)
select bookid,memberid,count(*) as cnt
from book_browser_record
group by bookid,memmberid
order by bookid, count(*)
step 3.
select top 8 memberid from book_browser where bookid =?
step 1.
開一個Table 紀錄 memberid和 bookid,
step 2.
寫一個SQL procedure 一天跑一次
ex.
insert into book_browser(memberid, bookid, cnt)
select bookid,memberid,count(*) as cnt
from book_browser_record
group by bookid,memmberid
order by bookid, count(*)
step 3.
select top 8 memberid from book_browser where bookid =?
#32
cookie是肯定不能用的,cookie可以是用于之前自己浏览过哪些商品
session也是不能用的,session是会爆的,一般都只用来存用户信息,不然什么都塞,哪吃的消。
关键是数据库的表结构设计,以及性能的优化,或者做缓存,但是要设计一个良好的更新数据方案。
只是有一点,是一定要存DB的,然后定时同步DB和缓存,不然服务重启,你记录啥都没有。DB读取要到哪个频繁度,这个都是要具体考虑的。
你做一个商品对应客户的一对多,还是多对多表都没关系,因为这个一定不是实时的。
一个用户的浏览记录都存进去,可以先放缓存,再定时读缓存到DB,然后做一个分析的线程,可以在凌晨做一次,或者一天中午一次,晚上一次这样子,调用成堆的sql语句也好,一个存储过程也好,把数据分析好存到一张表,这个表的结果是很明了的,一条简单的sql语句就能实现查询要求的那种。具体是基于商品分析客户,还是基于客户分析商品,这个看你需求,你的侧重点究竟是在哪里,因为看过这个商品的其他用户不可能只有一个,你是取谁的8个,还是取平均量的8个,重复了怎么办,等等
session也是不能用的,session是会爆的,一般都只用来存用户信息,不然什么都塞,哪吃的消。
关键是数据库的表结构设计,以及性能的优化,或者做缓存,但是要设计一个良好的更新数据方案。
只是有一点,是一定要存DB的,然后定时同步DB和缓存,不然服务重启,你记录啥都没有。DB读取要到哪个频繁度,这个都是要具体考虑的。
你做一个商品对应客户的一对多,还是多对多表都没关系,因为这个一定不是实时的。
一个用户的浏览记录都存进去,可以先放缓存,再定时读缓存到DB,然后做一个分析的线程,可以在凌晨做一次,或者一天中午一次,晚上一次这样子,调用成堆的sql语句也好,一个存储过程也好,把数据分析好存到一张表,这个表的结果是很明了的,一条简单的sql语句就能实现查询要求的那种。具体是基于商品分析客户,还是基于客户分析商品,这个看你需求,你的侧重点究竟是在哪里,因为看过这个商品的其他用户不可能只有一个,你是取谁的8个,还是取平均量的8个,重复了怎么办,等等
#33
我觉得还是session还可以
记录到数据库不现实
因为这是一个意义不大的功能
如果要记录到数据库,时间一长,数据积攒将非常大
而且不停的连接数据库对程序的运行效率影响比较大
建议还是用session吧
记录到数据库不现实
因为这是一个意义不大的功能
如果要记录到数据库,时间一长,数据积攒将非常大
而且不停的连接数据库对程序的运行效率影响比较大
建议还是用session吧
#34
表格结构,id自增:T(id,uid,pid)
查询,应该针对产品做短时间缓存:select top 8 distinct pid from T where uid in (select uid from T where pid=@pid) and pid<>@pid order by id desc
定时清理:delete T where id<(select top 1 id from (select top 9 id from T as t1 where uid=T.uid order by id desc) as t2 order by id)
如果定时时间段内的用户量比较小于用户总数的一半时加条件:uid in (select distinct uid from T where id>@lastId)--说明@lastId是上次清理时的最大id
查询,应该针对产品做短时间缓存:select top 8 distinct pid from T where uid in (select uid from T where pid=@pid) and pid<>@pid order by id desc
定时清理:delete T where id<(select top 1 id from (select top 9 id from T as t1 where uid=T.uid order by id desc) as t2 order by id)
如果定时时间段内的用户量比较小于用户总数的一半时加条件:uid in (select distinct uid from T where id>@lastId)--说明@lastId是上次清理时的最大id
#35
建议去看一下QQ空间的访客是怎么做的,和楼主要实现的功能应该是相同的
#36
新人报道,来跟各位学习学习。
#37
应该是在两件商品之间建立一种联系,假设是A商品和B商品,这种联系是顾客从A商品浏览后是否直接跳转浏览B商品,而统计这种联系的就用一个整形数据类型的字段(假设是count)来概括,如果顾客在A与B之间建立了联系(即用户浏览A后直接跳转浏览B),那么count加1.你也可以在这些前提下设置一个条件,如count必须大于多少时才显示B:"浏览A商品的顾客还浏览过B,...".数据库可以这样建:
ID 主键
firstGoodsID 形如A商品的ID
secondGoodsID 形如B商品的ID
count 统计字段
ID 主键
firstGoodsID 形如A商品的ID
secondGoodsID 形如B商品的ID
count 统计字段
#38
搞错了,应该是表可以那样建!
#39
对题目还有点不是很理解,感觉有点歧义:
我现在需要在每个商品的下面 显示浏览过这个商品的用户还浏览过其他商品!
我有如下两种理解:
先定义一个词:用户浏览集---一个用户浏览过的所有商品的集合
理解1:你要是显示的商品只属于一个用户浏览集
理解2:你要显示的商品属于所有用户浏览集的集合
不过,不论哪种理解,觉得解决方法差不多,个人愚见如下:
建议在商品的表结构中增加一个字段:浏览过的用户集,来存放所有浏览过该商品的用户ID,
在用户的表结构中增加一个字段:浏览过的商品集合,来存放该用户浏览过的商品的ID。
如果按理解1,则解决方法如下:
从该商品浏览用户中随机取一个用户ID,然后,再显示改用户所浏览过的8种商品。
如果按理解2,则解决方法如下:
则浏览过该商品的所有用户的ID都取出来,然后根据这些用户ID,一一取出他们所浏览过的商品的ID,显示8种商品。
#40
呵呵!我觉得是我没把问题描述清楚!让大家走了弯路!
其实我就要迅雷看看那个效果!
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
其实我就要迅雷看看那个效果!
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
#41
.....
#42
只能说拿分。,晕死
#43
.
#44
mark
#45
session应该不行吧!
#46
session是不可能的 这种数据要么放到库中 要么放到APPLIACTION中
#47
数据仓库?
#48
用 j2EE做 连接数据库 然后做分页 再进行判断,
在分页上可以按一定的顺序排列!
在分页上可以按一定的顺序排列!
#49
up
#50
学习了,帮顶。
#1
我试图通过当客户每浏览一个就往数据库或者文件写入一次的办法,但是都不行!考虑到性能和速度!
#2
首先你得有个浏览记录表:
主键(id)
商品ID(s_id)
用户ID(u_id)
浏览时间...等参数
显示8条这个不难吧? 不用说了吧 直接select top(8) from 浏览表 order by 浏览时间 desc 取出最新的8条
至于你的实时显示这个好像很少有网站这样做 迅雷在线影视有个你观看记录也不是实时的 对以http协议要实现实时可能性能会消耗
如果你非得做可以考虑一下dwr的方向ajax和用ajax定时去刷新浏览记录
至于你说你有上百万记录 这个你得考虑做数据库和程序的集群了!
主键(id)
商品ID(s_id)
用户ID(u_id)
浏览时间...等参数
显示8条这个不难吧? 不用说了吧 直接select top(8) from 浏览表 order by 浏览时间 desc 取出最新的8条
至于你的实时显示这个好像很少有网站这样做 迅雷在线影视有个你观看记录也不是实时的 对以http协议要实现实时可能性能会消耗
如果你非得做可以考虑一下dwr的方向ajax和用ajax定时去刷新浏览记录
至于你说你有上百万记录 这个你得考虑做数据库和程序的集群了!
#3
up!!~
#4
这个放入session中不行吗?
跟购物车很像,可以先创建一个空的购物车,每浏览一页就自动把商品放入到此购物车中,并且取session中的值。
如果重复,你判断一下,该怎么显示。
跟购物车很像,可以先创建一个空的购物车,每浏览一页就自动把商品放入到此购物车中,并且取session中的值。
如果重复,你判断一下,该怎么显示。
#5
用ArrayList装载客户浏览的商品
把ArrayList放到session中
愚见
不知道是否可行
把ArrayList放到session中
愚见
不知道是否可行
#6
我觉得可以放入到session中
#7
放在服务器端就用session,放在客户端就用cookie
#8
#9
我也是想到了Session,只有8个商品,数据量又不大,没必要走到数据库层
#10
2楼的方案还可行,用session不太好吧。估计你的频繁操作session。
#11
二楼朋友:
应该是
商品主键对应商品主键吧!
关系是1个对应8个的。
因为是浏览过这个商品的所有用户还浏览过那些商品!
所以是商品底下显示的是商品!
如果插入数据库,那将是一个庞大的数据流!
例如有商品 1, 2, 3,4,5,6,7,8,9
有一个用户把这九个都浏览了!
商品1到9的每个页面上应该显示
于自己不同的其他8个
我说的百万有些夸大了!呵呵!
应该是
商品主键对应商品主键吧!
关系是1个对应8个的。
因为是浏览过这个商品的所有用户还浏览过那些商品!
所以是商品底下显示的是商品!
如果插入数据库,那将是一个庞大的数据流!
例如有商品 1, 2, 3,4,5,6,7,8,9
有一个用户把这九个都浏览了!
商品1到9的每个页面上应该显示
于自己不同的其他8个
我说的百万有些夸大了!呵呵!
#12
那就走cookie吧
#13
我仔细考虑了一下不管是数据库还是session 都很消耗资源!
我想到当用户session创建了以后就开始记录他浏览过的商品,
只记录商品ID然后当session销毁的时候把这些ID再进行整理进行物理存储
我想到当用户session创建了以后就开始记录他浏览过的商品,
只记录商品ID然后当session销毁的时候把这些ID再进行整理进行物理存储
#14
cookie 是客户端的!这个貌似行不通!
数据要保留在服务端的!
这样方便下一个用户一进来就很直观的能看到这个商品
底下的一些商品!
我刚才说的那个方法现在还是存在问题!呵呵!
这个问题是个弯弯绕的问题!
看来大家这么有热情我这就去给帖子加分!
数据要保留在服务端的!
这样方便下一个用户一进来就很直观的能看到这个商品
底下的一些商品!
我刚才说的那个方法现在还是存在问题!呵呵!
这个问题是个弯弯绕的问题!
看来大家这么有热情我这就去给帖子加分!
#15
不好意思!
呵呵
发帖一天后太刻意加分的!
#16
你只显示8条。那就按浏览时间排序最近的8条吧,那么表中只保留一段时间数据就足够了
#17
我觉得用这种方式用cookie在客户端先记录好当前浏览了哪些产品,以及次数
在退出你网站的时候把客户端cookie存的数据返回服务器并消灭当前cookie
服务端创建session对象获取用户传过来的商品ID+次数
隔一定的时间来执行sql语句更新数据库
服务端你产品表里面搞张对应表 增加个字段
这样做对服务端应该说压力不大
在退出你网站的时候把客户端cookie存的数据返回服务器并消灭当前cookie
服务端创建session对象获取用户传过来的商品ID+次数
隔一定的时间来执行sql语句更新数据库
服务端你产品表里面搞张对应表 增加个字段
这样做对服务端应该说压力不大
#18
没必要做时时交互,可以半自动呵呵
#19
关注
#20
用session.
#21
如果通过数据库的话 那么只能在该商品表里加个关联表 记录该商品的友好商品信息 当然 友好商品信息是随时可以更换的(根据用户的浏览)
LZ想要实时的数据 那样的话貌似每个用户来都得进行一次记录 那么 说下我的个人建议吧:
一个商品对应16个友好商品 关联表的字段只有两个 一个是友好商品的ID 一个是该友好商品的点击次数 排序根据点击次数排出前8条记录显示在前台 至于剩下那八条 则是为了让该商品动态的替换而留的 每次有一个浏览过该商品又浏览了其他商品的情况出现 都会进行更新(正常情况下商品表里最好也加个查看次数) 如果两条友好商品的查看次数都是1 那我们根据该商品的查看次数决定他的去留(不是在关联表里的查看次数 而是商品表的查看次数 这里LZ也可以适当的变通一下 比如 根据时间比较 或者是其他的什么)
-------------------------------------------------------------------------------------------------------------
第二种方案(如果您能看到这里那我很感激你...)
这个方案实际上很简单 效率上也很好 就是每个商品加一个类别和一个点击查看次数 每点商品一次就增加查看次数一次 友好商品列表里就输出前8个 或者 根据你所点的商品的点击次数 来获得友好商品的点击次数(比如该商品点击次数为5 那么可以根据5来获得一个范围 就点击次数5到10的 因为一般点击次数比较少的话 说明曾经有个用户浏览了所有的商品...当然 猜测而已)
用这个方法最大的好处就是效率 而且比较好实现(虽然看起来只是获得点击次数高的商品记录...但是如果用范围的获取方法 那么效果说不定会有些...)
累死偶咯 偶的回答如果帮不上您的忙的话.... 总之 我尽力了 后面的帮顶啊!
#22
另外 如果不想通过更新数据库的方式来获得的话 还有一种办法 就是appliaction 当用户点击某样商品的时候 同时更新APPLIACTION里的关于该商品的点击信息(APPLIACTION里放该商品的类别和点击次数) 这个方法也比较简单
#23
补充下: 所谓的用户我觉得只是一个不存在的东西 如果说LZ一定要坚持查看某些用户浏览过的商品的话 那么每个商品难道都要加个最近浏览用户的表表? 每个用户都有个最近浏览商品的表表?期待高人解答
#24
理解不了,不知道如何实现啊
#25
楼主没有给用户提供他近期浏览过的商品的情况吗 如果这样但就关联商品表恐怕不行吧 这个效果似乎和xunleikankan里面的一样
#26
就是和迅雷看看的那个“最近浏览过的大片”一个效果!
#27
!
#28
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
#29
21楼的朋友:
真是太感谢你了!
你说的很有道理!我尝试去做一下!
说不定会碰到一些新的问题!
还需要再来请教你!
说真的!这个问题真不简单那!
希望后来的朋友能提出更好的建议,和自己的见解!
期待中!!!
明天给该贴加分!!!
真是太感谢你了!
你说的很有道理!我尝试去做一下!
说不定会碰到一些新的问题!
还需要再来请教你!
说真的!这个问题真不简单那!
希望后来的朋友能提出更好的建议,和自己的见解!
期待中!!!
明天给该贴加分!!!
#30
学习下 我也不会 呵呵
#31
小弟的建議是使用DB
step 1.
開一個Table 紀錄 memberid和 bookid,
step 2.
寫一個SQL procedure 一天跑一次
ex.
insert into book_browser(memberid, bookid, cnt)
select bookid,memberid,count(*) as cnt
from book_browser_record
group by bookid,memmberid
order by bookid, count(*)
step 3.
select top 8 memberid from book_browser where bookid =?
step 1.
開一個Table 紀錄 memberid和 bookid,
step 2.
寫一個SQL procedure 一天跑一次
ex.
insert into book_browser(memberid, bookid, cnt)
select bookid,memberid,count(*) as cnt
from book_browser_record
group by bookid,memmberid
order by bookid, count(*)
step 3.
select top 8 memberid from book_browser where bookid =?
#32
cookie是肯定不能用的,cookie可以是用于之前自己浏览过哪些商品
session也是不能用的,session是会爆的,一般都只用来存用户信息,不然什么都塞,哪吃的消。
关键是数据库的表结构设计,以及性能的优化,或者做缓存,但是要设计一个良好的更新数据方案。
只是有一点,是一定要存DB的,然后定时同步DB和缓存,不然服务重启,你记录啥都没有。DB读取要到哪个频繁度,这个都是要具体考虑的。
你做一个商品对应客户的一对多,还是多对多表都没关系,因为这个一定不是实时的。
一个用户的浏览记录都存进去,可以先放缓存,再定时读缓存到DB,然后做一个分析的线程,可以在凌晨做一次,或者一天中午一次,晚上一次这样子,调用成堆的sql语句也好,一个存储过程也好,把数据分析好存到一张表,这个表的结果是很明了的,一条简单的sql语句就能实现查询要求的那种。具体是基于商品分析客户,还是基于客户分析商品,这个看你需求,你的侧重点究竟是在哪里,因为看过这个商品的其他用户不可能只有一个,你是取谁的8个,还是取平均量的8个,重复了怎么办,等等
session也是不能用的,session是会爆的,一般都只用来存用户信息,不然什么都塞,哪吃的消。
关键是数据库的表结构设计,以及性能的优化,或者做缓存,但是要设计一个良好的更新数据方案。
只是有一点,是一定要存DB的,然后定时同步DB和缓存,不然服务重启,你记录啥都没有。DB读取要到哪个频繁度,这个都是要具体考虑的。
你做一个商品对应客户的一对多,还是多对多表都没关系,因为这个一定不是实时的。
一个用户的浏览记录都存进去,可以先放缓存,再定时读缓存到DB,然后做一个分析的线程,可以在凌晨做一次,或者一天中午一次,晚上一次这样子,调用成堆的sql语句也好,一个存储过程也好,把数据分析好存到一张表,这个表的结果是很明了的,一条简单的sql语句就能实现查询要求的那种。具体是基于商品分析客户,还是基于客户分析商品,这个看你需求,你的侧重点究竟是在哪里,因为看过这个商品的其他用户不可能只有一个,你是取谁的8个,还是取平均量的8个,重复了怎么办,等等
#33
我觉得还是session还可以
记录到数据库不现实
因为这是一个意义不大的功能
如果要记录到数据库,时间一长,数据积攒将非常大
而且不停的连接数据库对程序的运行效率影响比较大
建议还是用session吧
记录到数据库不现实
因为这是一个意义不大的功能
如果要记录到数据库,时间一长,数据积攒将非常大
而且不停的连接数据库对程序的运行效率影响比较大
建议还是用session吧
#34
表格结构,id自增:T(id,uid,pid)
查询,应该针对产品做短时间缓存:select top 8 distinct pid from T where uid in (select uid from T where pid=@pid) and pid<>@pid order by id desc
定时清理:delete T where id<(select top 1 id from (select top 9 id from T as t1 where uid=T.uid order by id desc) as t2 order by id)
如果定时时间段内的用户量比较小于用户总数的一半时加条件:uid in (select distinct uid from T where id>@lastId)--说明@lastId是上次清理时的最大id
查询,应该针对产品做短时间缓存:select top 8 distinct pid from T where uid in (select uid from T where pid=@pid) and pid<>@pid order by id desc
定时清理:delete T where id<(select top 1 id from (select top 9 id from T as t1 where uid=T.uid order by id desc) as t2 order by id)
如果定时时间段内的用户量比较小于用户总数的一半时加条件:uid in (select distinct uid from T where id>@lastId)--说明@lastId是上次清理时的最大id
#35
建议去看一下QQ空间的访客是怎么做的,和楼主要实现的功能应该是相同的
#36
新人报道,来跟各位学习学习。
#37
应该是在两件商品之间建立一种联系,假设是A商品和B商品,这种联系是顾客从A商品浏览后是否直接跳转浏览B商品,而统计这种联系的就用一个整形数据类型的字段(假设是count)来概括,如果顾客在A与B之间建立了联系(即用户浏览A后直接跳转浏览B),那么count加1.你也可以在这些前提下设置一个条件,如count必须大于多少时才显示B:"浏览A商品的顾客还浏览过B,...".数据库可以这样建:
ID 主键
firstGoodsID 形如A商品的ID
secondGoodsID 形如B商品的ID
count 统计字段
ID 主键
firstGoodsID 形如A商品的ID
secondGoodsID 形如B商品的ID
count 统计字段
#38
搞错了,应该是表可以那样建!
#39
对题目还有点不是很理解,感觉有点歧义:
我现在需要在每个商品的下面 显示浏览过这个商品的用户还浏览过其他商品!
我有如下两种理解:
先定义一个词:用户浏览集---一个用户浏览过的所有商品的集合
理解1:你要是显示的商品只属于一个用户浏览集
理解2:你要显示的商品属于所有用户浏览集的集合
不过,不论哪种理解,觉得解决方法差不多,个人愚见如下:
建议在商品的表结构中增加一个字段:浏览过的用户集,来存放所有浏览过该商品的用户ID,
在用户的表结构中增加一个字段:浏览过的商品集合,来存放该用户浏览过的商品的ID。
如果按理解1,则解决方法如下:
从该商品浏览用户中随机取一个用户ID,然后,再显示改用户所浏览过的8种商品。
如果按理解2,则解决方法如下:
则浏览过该商品的所有用户的ID都取出来,然后根据这些用户ID,一一取出他们所浏览过的商品的ID,显示8种商品。
#40
呵呵!我觉得是我没把问题描述清楚!让大家走了弯路!
其实我就要迅雷看看那个效果!
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
其实我就要迅雷看看那个效果!
就是和迅雷看看的那个“看过该片的人还看过”一个效果!
#41
.....
#42
只能说拿分。,晕死
#43
.
#44
mark
#45
session应该不行吧!
#46
session是不可能的 这种数据要么放到库中 要么放到APPLIACTION中
#47
数据仓库?
#48
用 j2EE做 连接数据库 然后做分页 再进行判断,
在分页上可以按一定的顺序排列!
在分页上可以按一定的顺序排列!
#49
up
#50
学习了,帮顶。