我正在开发一种拍卖风格的网络应用程序,产品可以在一段时间内使用。
我想知道你会如何建模。
到目前为止,我所做的是将产品存储在DB中:
{
...
id: p001,
name: Product 1,
expire_date: 'Mon Oct 7 2013 01:23:45 UTC',
...
}
每当客户端请求该产品时,我都会测试* current_date< EXPIRE_DATE *
如果为true,我会显示产品数据,并在客户端显示倒数计时器。如果计时器达到0,我将禁用相关控件。
但是,在服务器方面,即使没有人请求该产品,仍有一些操作需要完成,例如,通知所有者他的产品已经结束。
我可以根据每个请求扫描整个产品系列,但对我来说似乎很麻烦。
我想过每隔n分钟用cron触发一次例程,但想知道你是否可以考虑任何更好的解决方案。
谢谢!
答案 0 :(得分:1)
在每个请求上扫描整个集合听起来像是浪费处理时间。
我会使用pm2
之类的东西来处理跟踪主服务器进程以及运行具有内置类似cron功能的周期性任务。
答案 1 :(得分:1)
一些想法:
expire_date
字段编制索引。如果您正在扫描超过特定日期的拍卖品,您会想要。 expired
(或active
)的第二个字段,这样您也可以进行其他类型的非日期搜索(因为您可以随时拒绝已过期的竞价) )。 active
,您可以进一步将扫描限制为仅处于活动状态且超过截止日期的拍卖项目。考虑这些案例的复合指数。 (随着时间的推移,您将有更多过期的项目,例如您不需要扫描)。 可能是这样的:
{
...
id: p001,
name: "Product 1",
expire_date: ISODate("Mon Oct 7 2013 01:23:45 UTC"),
active: true,
...
}
// console
db.auctions.esureIndex({expire_date: -1, active: 1})
// javascript idea:
var theExpirationDate = new Date(2013, 10, 06, 0, 0, 0);
db.auctions.find({ expire_date : { "$lte" : theExpirationDate }, active: true })