计算购物车中的商品总价的问题

12-12-12 lostalien
描述:比如我购物车中有10件不同的商品,我要计算总价格,先不管什么折扣之类的,只简单的算成 把10个商品的价格相加。

问题: 用面向对象的观点,应该是购物车调用每个商品的getPrice()方法,把总和相加,可是,为了计算总价格,把10个对象载入内存,肯定不如直接在数据库里直接来条sql语句计算下总价格快吧?如果用Hibernate,开了二级缓存,应该能解决速度问题,可是那么多商品呢,价格很有可能也老变,放在缓存里是不是也不太合适呢?

1
banq
2012-12-13 09:26
2012-12-12 21:33 "@lostalien"的内容
为了计算总价格,把10个对象载入内存,肯定不如直接在数据库里直接来条sql语句计算下总价格快吧 ...

我认为不会比数据库慢,内存中相加,而数据库需要IO读写:

看这个实验:异步日志 vs. 内存映射文件,只要通过I/O,性能总是比不上日志信息在内存中直接拷贝。

lostalien
2012-12-13 13:34
2012-12-13 09:26 "@banq"的内容
内存中相加 ...

但是在相加之前,还是得通过读数据库把这些商品的信息载内存呃。。。

banq
2012-12-13 18:15
2012-12-13 13:34 "@lostalien"的内容
相加之前,还是得通过读数据库把这些商品的信息载 ...

购物车的数据来自前端,前端浏览商品时,不是已经把这些商品从数据库加载到内存了,那么等他加入购物车,还是使用的是内存中那些商品。内存中商品生存周期是整个Application,而不是每次request,使用Hibernate二级缓存就能达到。

SpeedVan
2012-12-14 01:48
一、速度问题

我不太明白你为什么把载入内存的时间会累计到相加的时间上。。。

面向数据库的话,对象永远输在载入上的,为什么?因为对象本来就不考虑神马载入的,思考的领域本来就在缓存(内存)中。

对象的观点是:一切的对象都在缓存中,什么?在数据库中?不可能,你眼花了。在总和相加的问题上,对象只考虑“加法”的时间。

思考:每次数据库都要转成对象处理,多慢!干脆不要转了,对象神马的完全抛开,直接用C来拼sql,多快!

二、价格变动

价格老变,放在缓存不是更好么?我不知道你想到哪里了。

SpeedVan
2012-12-14 01:52
2012-12-13 13:34 "@lostalien"的内容
但是在相加之前,还是得通过读数据库把这些商品的信息载内存呃。。。 ...

这些本来就是对象和数据库之间的兼容代价,想要兼容,又不想要这代价,可以!用其他代价来换吧。

lostalien
2012-12-14 11:49
恩,大概知道了,谢谢all

猜你喜欢