我现在要存储一百万件商品的历史价格,目前数据结构是这么设计的:
{"product_id":123,
“ current_price ”: 998,
"history":[{"date":"2015-12-01 13:32 1202", "price": 21}]
}
这么设计目前存在几个问题,
1.由于我数据是实时更新的,但我只想保留变动的历史数据,没有变动不想要,目前我是用$addToSet 去添加数据,如果用用时间精确到小时都会插入大量对我没有什么意义的数据, 怎么才能既能精确保留历史变更数据但是又不会导致数据无意义写入
2.我想给用户去推送最近价格下降的商品,我该怎么改进结构,能让程序能够快速方便的查询到呢?
1
hrong 2016-10-24 06:12:08 +08:00 via Android 1
一,变动的时候插入数据。二,增加新表。
|
2
yidinghe 2016-10-24 08:07:07 +08:00 via Android 1
在 Document 内部进行实时检索是不行的,因为缺少索引。建议加上一个最近趋势的属性,每次更新价格时,如果较上次价格降低了,则设置该属性值为 down ,否则为 up ,这样就能轻松查到最近价格下降的商品了。
|
3
SlipStupig OP @hrong 变动的时候,我怎么知道变动了,我一条一条数据跟新的数据去比对?这样会不会有点慢啊
|
4
hrong 2016-10-24 14:17:52 +08:00 via Android
@SlipStupig 参考二楼
|
5
whimsySun 2016-10-24 22:10:20 +08:00 1
二楼,再加一个上一次变动的数据
|
6
SlipStupig OP @hrong 这样是很好,但是如果这个商品过一段时候没有变价,状态一直会是降价,可能在一个时间段类降价的商品会有点多哦
|
7
jimideer 2016-10-25 00:02:01 +08:00 1
用个定时器,对于时间长时间价格不变的,把价格升降的属性去掉。
|
8
zado 2016-10-25 08:21:03 +08:00 1
1.用 memcached 把上次的价格存起来。
2.用 memcached 把价格下降的商品存起来。 |
9
minvacai 2016-10-25 09:00:05 +08:00 via Android 1
可以考虑用二楼的方法再加上变动时间,最近一段时间内变动的才显示为降价,例如近三天内或者近两周内
不这样的话 memchached 或者 redis 也都可以 |