问题: 1.购物车中的数据是否应该存储在数据库中?
我特别想知道在真正的项目中,那些真正的软件工程师是如何考虑这个问题的。在Google上一搜,搜到了一篇咱园子里一位网友的观点:购物车应该是个临时存储数据的模块,他将其存放在Session对象中。这位网友说的很有道理,不过我并不喜欢这样的做法。如果大家都将其存储在Session对象中,成千上万个用户一同购物的话,想必ASP.NET服务器必将承受巨大的负载。也许像我们国内的网站可能会好一些,但想Amazon这样的网站,怎么做的呢?Amazon中国网站,也就是Joyo的网站,并不是将其存储在Session对象中,因为我如果这次放入购物车中的商品没有提交订单,下次登录后购物车中还会有这些商品。因此,我想他们可能是将这些购物车中的数据放入了数据库中。
回复: 把购物车存放在Session中,这种做法似乎只存在于大学里的课程设计或者一些无人在意的实习项目中出现。事实上,基本所有的电子商务网站都把购物车数据存放到了数据库里。下面是一些解释和设计上需要注意的地方:
1、Session并不适合做大数据量的数据存放,当用户比较多的时候势必影响服务器性能,这是应该避免的。
2、Session存在意外丢失的问题,或者当用户不小心关闭浏览器,都会引起购物车内物品全部丢失,用户体验很不好
3、Cookies可以解决上面一条里Session的问题,但是Cookies的长度限制,以及使用Cookies时的通讯开销,还有安全性方面考虑,Cookies并不适合做购物车
4、比较好的用户体验是,无论用户登录与否,都可以在一定时间内记录购物车状态,这就要求数据库内购物车不能与用户捆绑太死
5、放到购物车里的商品,一般都是有购买意向的商品,但并不一定会成为真实的订单,这时候,保留这份数据,对数据挖掘、业务分析有至关重要的作用
问题: 2.关于并发?
原来我在开发自己的模拟网站的时候,曾经想到这样一个问题:如果一个客户在网站将一些图书放入了购物车,那么这些数量的图书是否应该从库存中减去呢?当时我是这样做了。我将购物车中相应图书的数量从数据库中减去,以防止此时其他用户看到”虚”的库存数量(如果没有减去,那么其他用户是可以购买的。例如:库存中图书的数量是10本,客户A将10本放入自己的购物车,此时客户B也将10本放入自己的购物车,那么谁将购买到此书将成为一个矛盾)。不过我这样做的结果是,每当客户更新购物车的同时就会同数据库有一次交流,加大了数据服务器的负担。Amazon.cn在这方面做的也不是很好,前些日子相信大家可能都遇到了当购买《深入理解操作系统》一书的时候,本来生成了订单,但是却在第二天告知缺货的事情。这一事件确实非常影响Amazon.cn的信誉,不知道现在他们的系统是否已经解决这一问题,不过现在《深入理解操作系统》一书的Joyo价已经今非昔比了。不知道各位高手是如何解决这一问题的,欢迎大家将自己的成功经验写在评论中。
一些关于asp 购物车的想法
内容版权声明:除非注明,否则皆为本站原创文章。