您的位置:首页 > 其它

无聊的的随笔记录

2012-11-22 17:50 148 查看
啰哩啰唆,只是自己mark下。看到的请绕道:)

相关的5个表:

1)订单表order 100W量 主键order_id

2)订单明细order_deatil(所购买的商品明细) 500W量 主键order_deatil_id 存订单表order_id

3)商品表goods

4)订单log记录order_detail_log表 每次对商品订单的操作都记录。3000W量 ,(没有在此表记录申请退款的时间)

字段:

order_id 订单id

order_deatil_id 订单明细id

status 状态 status为操作后的订单的状态

create_time 时间

opt 操作人

desstr 描述信息。

每个order_deatil_id作为记录单位

下单、支付成功 、申请退款等每个对订单明细的操作都记录 。

5)退款表order_refund (退款在单条的order_deatil上申请,不在order上申请) 10W

业务流程:

1.下单成order order_datail

order_detail_log做记录,动作为下单成功,状态为下单成功INIT

2.支付成功:

修改order order_datail状态为成功

order_detail_log做记录,动作为支付成功,状态为支付成功SUCCESS

3.用户申请退款(针对单条的order_datail申请,不是针对整个order)

修改order_datail 状态为退款审核中

order_detail_log做记录,动作为退款申请,状态为退款审核中

4.运营审核(针对单条的order_datail):

审核不通过 将order_datail修改为支付成功状态。

order_detail_log做记录,动作为退款拒绝,状态为退款拒绝

5。用户可继续申请第3 步骤。

这样order_detail_log每次都会记录用户申请退款的动作。

6.退款申请通过时,插入order_refund表

order_detail_log做记录,动作为退款通过,状态为退款成功

退款成功了就不能再次申请了~

需求:要查询申请退款时间在某个时间段内的订单明细数据

需要用到order_datail order_detail_log 2个表

order_detail_log的status为退款审核中的order_datail_id

order_detail_log数据量3000W。增长很快。查询越来越慢。

解决方案:

1、在order_detail_log增加索引。status,会快很多。一段时间内,没问题,但是查询时间段大的时候可能会慢。

项目分成2次查询先查order_detail_log 符合时间的order_detail_id

再用sql: order_datail.order_datail_id in( '在order_detail_log中查出的order_detail_id集合') in当中条数多的时候会很慢。

前人开发时没敢直接把这2个表做join可能怕查死了。。。

2. 修改业务逻辑:

退款申请时直接插入order_refund表(退款审核中),不在审核通过时插入,

退款拒绝时将order_refund表状态改为退款拒绝

对可能驳回后,又申请的:order_refund表无数据,可申请,有数据状态为退款拒绝也可申请,再申请时将该条数据改为退款申请中,时间操作人等也修改。

这样查询申请退款时间 关联order_detail 和order_refund(状态不为驳回的)两个表。不再去超大的log表查询

3.在order_detail表加上申请退款时间的字段,加索引。

1.不用改现在的代码。可以运行一段没问题。

2.改动了现在的业务逻辑。代码改动稍微大一些

3.改动业务逻辑。表清晰了。不用关联别的表了。但是order_detail表已经有好多索引了。。(哪个项目这样的明细表不都得弄个 3 4个索引了~)

个人倾向:加完log的索引之后,按2修改。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: