【发布时间】:2018-11-04 12:45:21
【问题描述】:
示例:我有200 000 users,注册后必须在30 day 收费。他们都有不同的注册日期。因此,每个用户的收费日期都会有所不同。
谷歌搜索后,我发现了这个库Node Schedule,它可以在特定时间触发一个函数。我在注册时为每个用户设置付款日期。例如,用户在17:36注册,那么他的付款日期将是17:36 after 30 days。
node-schedule 的代码如下所示:
var schedule = require('node-schedule');
schedule.scheduleJob(chargingDateFromDB, () => {
console.log('The payment is done and new date for charging is set);
});
这样,我相信,节点会将每个计划的信息存储在操作内存中,并将其保存到30 days,并在支付下一个30 days等之后......
所以我对性能有疑问。有没有更好的方法来实现每月订阅?我向用户收费的方式是常用的还是必须有更有效的方式?
【问题讨论】:
-
您为什么要在一天中的不同时间向不同的用户收费?通常系统只是为当天做一个批量账单——一个事件在早上 6:00 运行,查找当天必须付款的每个人,然后向他们开账单。付款日期通常是固定的,因此您可能每次都在每月 1 日付款,但像 Google 音乐这样的订阅确实会让您在订阅当天付款。无论如何,我还没有听说过为每个用户安排单独付款的系统。
-
所以计划可能是这样的:每天早上检查每个用户的paymentDate,如果paymentDate makePayment()。类似的东西?
-
好吧,你会做类似
paymentDate = todayDate的事情。您基本上会尝试检查付款日期是否是 21 日,而今天是 21 日,然后付款。当然,您必须小心月末日期和二月,但要判断何时处理它们并使其正常化。虽然如果您想要正好 30 天,而不是按月付款,那么您必须以某种方式检查(today - lastPaymentDate) = 30,但这可以缓解您的月末处理问题。
标签: javascript node.js dom-events