Job
データベースに保存されているオブジェクトをnode.jsに入れてみませんか。
var Job = {
id: long,
task: String,
configuration: JSON,
dueDate: Date,
finished: bit
};
Job
IDのみをRAMに保存し、他のすべてのデータはデータベースに残すことをお勧めします。タイムアウト関数が最終的に実行されるとき、.id
それは他のデータを取得するために知っている必要があるだけです。
var job = createJob(...); // create from async data somewhere.
job.save(); // save the job.
var id = job.id // only store the id in RAM
// ask the job to be run in the future.
setTimeout(Date.now - job.dueDate, function() {
// load the job when you want to run it
db.load(id, function(job) {
// run it.
run(job);
// mark as finished
job.finished = true;
// save your finished = true state
job.save();
});
});
// remove job from RAM now.
job = null;
サーバーがクラッシュした場合は、を持っているすべてのジョブをクエリし[finished=false]
、それらをRAMにロードして、setTimeoutsを再度開始するだけです。
何か問題が発生した場合は、次のように正常に再起動できるはずです。
db.find("job", { finished: false }, function(jobs) {
each(jobs, function(job) {
var id = job.id;
setTimeout(Date.now - job.dueDate, function() {
// load the job when you want to run it
db.load(id, function(job) {
// run it.
run(job);
// mark as finished
job.finished = true;
// save your finished = true state
job.save();
});
});
job = null;
});
});