问题: 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价已经今非昔比了。不知道各位高手是如何解决这一问题的,欢迎大家将自己的成功经验写在评论中。
回复: 首先说一下数据库服务器的负担,想一下每访问一个页面要对数据库进行多少次访问,然后想一下多次访问才能换来一次放购物车的操作(访问次数主要取决于网站易用性的设计,这是另外一个话题),所以,虽然在这里修改设计可以减轻一些数据库压力,但是这里并不是瓶颈,丁学认为不需要在这里太在意。
目前比较通用的做法,购物车的商品是不会立即扣减库存的,主要是为了防止有人通过购物车恶意占用商品,另外一般都会给一个冗余量,因为大部分购物车里的商品不会进入最终的成功订单,不可以让购物车影响销量,这是必须做到的。库存一般在订单成功提交的时候扣减库存,也就是用户在提交订单时,你还有一次机会提示用户没有库存了,所以更没有必须在放到购物车时就扣减库存。对于“成功订单”,并不是所有用户提交的订单都算成功订单,这里有一个自动审单的过程,这个程序不好写,但确实很重要,根据以前的数据分析、用户行为、用户信誉等经验性的数据来由系统在几分钟内自动对订单完成一次审核,审核力度与行业有关,这样可以杜绝大部分的假订单,其中一部分可能还要由自动审单系统转交人工审核。
这里有一个特殊情况,有一些特殊商品比如演唱会门票,可能会存在在线选座的行为,这种时候放购物车后留座变得比较有用,现在的做法一般是放购物车后立即留座,但某一段时间未成为真实订单的话就自动释放,比如十分钟,虽然无法完全杜绝恶意占座,不过可以解决多数问题。现在票务方面的成功订单和大部分其他行业不太一样,票务行业的在线选座成功订单的判断标准为是否已经成功支付,就是说除非你给钱了,不然只能给你留十分钟。
问题: 3.订单和订单明细同购物车的关系
我想这个问题可能一直是此类网站的一个大问题吧!前两天,CSTP的陈老师还曾在电话中面试我这道题,我当时很紧张,问题答的不是很清楚。其实这个问题简单的想并不难:两个表订单和明细,订单表中每列指向明细表中的对应列。外键就是订单表中的订单号。
回复: 这个问题比较简单,一种是放购物车里就当是订单了,拿一个状态标识一下,这种状态下订单是可修改的,购物车合并进订单系统(注意处理用户登录与非登录状态);第二种是有单独的购物车表,当最终提交订单时,复制购物车内的信息进订单和订单明细表。后一种用得比较多一些,具体选择哪个取决于行业和商品属性。
问题: 4.明细表中订单号的生成?
这个问题继承第3个问题,我一直不知道应该如何解决此问题。我有两个解决方案,一个是使用触发器,另一个是编程。前者在客户每次放入购物车中一种商品的同时增加一个明细,确认购买后生成订单,将明细表中的购买状态更改以触发触发器将生成一个订单号(当然这个订单号既可以在触发器中编程也可以是让订单表订单号的一列设置为自动生成序号)。后者将判断订单号,然后将其加1以生成新的订单号。但是这两个方案我总是觉得非常不好,很想知道在商用网站中订单号是如何处理的。
回复: 首先我个人认为触发器的方案不可取,理由不多说,不然又是一大坨。这里也有两种做法,一种是订单表自动生成编号,生成订单时,先写入订单表,然后取回订单号再更新订单明细表;另一种是按业务规则生成订单号,当订单号已知后随便先生成订单记录还是明细记录都可以,但是要保证明细记录最终一定有订单记录,不然会有很多诡异的明细项。后一种办法又有两种做法,一是订单号由数据库生成,一般采用临时表,好处是可以全业务通用流水号,另一种是订单号由程序生成,程序生成时可以使用GUID,但更好的办法是使用订单时间加标识值,时间部分可以根据订单量来确定粒度大小,标识部分采用有序编号,时间粒度还要考虑防止别人大概统计你的业务量(汗~~~这个也是另外的问题,很多做法,看情况了,改天有空再写个有关订单号生成的文章吧,先回复这么多,大概信息也够了……)
分享到:
相关推荐
关于购物车,我的想法是把购物车放在浏览器右边,像对联广告一样。用户浏览哪个页面都能清楚看到自己的购物车。 cookie实现的购物车性能好、实现简便、而且保留时间长。用session也可以实现,但是因为跟...
关于购物车,我的想法是把购物车放在浏览器右边,像对联广告一样。用户浏览哪个页面都能清楚看到自己的购物车。 cookie实现的购物车性能好、实现简便、而且保留时间长。用session也可以实现,但是因为跟服务器端交互...
其次,关于并发处理和库存管理。在并发环境下,确保库存的准确性和防止资源滥用是一个挑战。在早期的设计中,可能会在商品加入购物车时立即减少库存,但这会导致一些问题,如描述中提到的库存冲突。实际上,大多数...
用WordPress做个电子商务网站,工作之余在网上卖点小东西,呵呵,是不是很不错的想法,如果你有这样的想法,那么,你就去做吧,为你介绍一款强大的插件WP e-Commerce。 WP e-Commerce是一款电子商务购物车插件程序...
后来嵌套数据,当数据量较大时,滑动Listview可以明显感觉到卡顿,这对用户来说是很难忍受的,所以才有了找到替代方案的想法,看到网上主流的是用ExpandableListView来实现此功能,所以我也用此方案来写一下。...
Spring Boot购物车Web应用程序关于这是一个练习Spring + Thymeleaf的演示项目。 这个想法是建立一些基本的购物车网络应用程序。 它是使用Spring Boot , Spring Security , Thymeleaf , Spring Data JPA , Spring...
3. **留言板功能**:留言板是用户交流的重要工具,它通常由服务器端存储的数据库支持,用户可以在上面发表评论、提问或分享想法。在这个室内装潢设计网站中,管理员可以查看并回复用户的留言,增强用户参与度,提高...
也许将来我会实施订购,这是一个有趣的想法。 添加的产品进入购物车,购物车的主页上设有计数器,允许移除和修改数量,并带有按钮进行付款。使用的技术样式:使用flex的样式化组件和纯CSS 状态管理:Pure Redux,...
网络组件我正在考虑一些想法,使带有购物车的网站非常模块化。 所以基于和我一直在玩的其他一些随机的事情,我想我会尝试组装一堆人们可能需要的组件,以便轻松地组装一个商业类型的网站。 当然有一个构建系统和诸如...
这个想法是学生实现这些服务和其余服务的逻辑。 更多数据: 该应用程序在客户端使用 jQuery Mobile 编写,在服务器端使用 Spring Boot + Spring Rest 编写。 用于消息的格式是 JSON。 假定应用程序是有状态的。...
由于可用性允许选择每个开发者约定的小时数为了将其视为重要的系统想法,请尽可能概述实际应用程序的行为服务器端我使用Node.js开发整个系统。 根据会话制作购物车,没有理由让购物车继续存在。 互联网连接出现问题...
这个项目是一个基于我自己想法的自营商城应用程序,是Orange Online mall的一个功能。目前,前端和后端功能已经实现,主要包括登录、注册、产品展示、购物车等模块。后端包括添加和删除产品、添加和删除商品以及订单...
这个项目仿照小米官网商城的功能,是一个根据我自己的想法实现的自营商城应用程序。目前,仅实现了前端功能,主要包括登录、注册、产品展示、购物车等模块。为了便于该项目的未来改进和扩展,我采用了前端和后端分离
#Awesome-Shop 一个使用 Angular 和 Bootstrap 构建的简单网络商店。...开放的想法... ##Licensing 和 Copywrite 此应用程序使用 ThinkGeek 中的图像和副本作为示例。 去他们的商店看看你自己的。
此项目是橘子网上商城的功能,按照我自己的想法实现的一个自营模式的商城应用。 目前实现了前台的功能,后台的功能,主要有登录,注册,商品展示,购物车等模块。后台面有添加商品,删除商品,商品上下架,订单管理,管理...
3. 购物车操作:添加、删除商品,计算总价,以及保存用户的购物车状态。 4. 弹窗提示:如登录注册、确认购买、消息提醒等,通过JavaScript弹出对话框与用户进行交互。 5. 表单验证:在提交订单前,验证用户填写的...
提供项目的想法数据库创建创建购物车购物车基本功能要求设置基本购物车用户界面C.Cường: 提供项目的想法数据库创建创建购物车购物车订单的历史和历史项目简报龙(T.Long): 提供项目的想法项目基准提供数据进阶...
该入门者创建了一个商店,该商店具有自定义的着陆页,每种产品的单独过滤视图,详细的产品页以及购物车。 所有样式均采用风格,包括对暗模式的支持。 还有其他更具体的想法吗? 您可能需要查看我们充满活力的集合...
事件溯源演示这是为首届 O'... 这是电子商务购物车应用程序范围内事件溯源的简单演示。 它的一个主要依赖项是,在撰写本文时,它尚不可 maven 访问。 它非常有限,但旨在提供与应用程序交互如何生成和读取事件的想法。