Mongodb 怎么设计结构,存储历史价格最合理呢?

2016-10-24 05:48:40 +08:00
 SlipStupig

我现在要存储一百万件商品的历史价格,目前数据结构是这么设计的:


    {"product_id":123,
    “ current_price ”: 998,
  "history":[{"date":"2015-12-01 13:32 1202", "price": 21}]

}

这么设计目前存在几个问题, 1.由于我数据是实时更新的,但我只想保留变动的历史数据,没有变动不想要,目前我是用$addToSet 去添加数据,如果用用时间精确到小时都会插入大量对我没有什么意义的数据, 怎么才能既能精确保留历史变更数据但是又不会导致数据无意义写入
2.我想给用户去推送最近价格下降的商品,我该怎么改进结构,能让程序能够快速方便的查询到呢?

4333 次点击
所在节点    程序员
9 条回复
hrong
2016-10-24 06:12:08 +08:00
一,变动的时候插入数据。二,增加新表。
yidinghe
2016-10-24 08:07:07 +08:00
在 Document 内部进行实时检索是不行的,因为缺少索引。建议加上一个最近趋势的属性,每次更新价格时,如果较上次价格降低了,则设置该属性值为 down ,否则为 up ,这样就能轻松查到最近价格下降的商品了。
SlipStupig
2016-10-24 11:18:38 +08:00
@hrong 变动的时候,我怎么知道变动了,我一条一条数据跟新的数据去比对?这样会不会有点慢啊
hrong
2016-10-24 14:17:52 +08:00
@SlipStupig 参考二楼
whimsySun
2016-10-24 22:10:20 +08:00
二楼,再加一个上一次变动的数据
SlipStupig
2016-10-24 23:08:14 +08:00
@hrong 这样是很好,但是如果这个商品过一段时候没有变价,状态一直会是降价,可能在一个时间段类降价的商品会有点多哦
jimideer
2016-10-25 00:02:01 +08:00
用个定时器,对于时间长时间价格不变的,把价格升降的属性去掉。
zado
2016-10-25 08:21:03 +08:00
1.用 memcached 把上次的价格存起来。
2.用 memcached 把价格下降的商品存起来。
minvacai
2016-10-25 09:00:05 +08:00
可以考虑用二楼的方法再加上变动时间,最近一段时间内变动的才显示为降价,例如近三天内或者近两周内

不这样的话 memchached 或者 redis 也都可以

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/314903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX