首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >beanstalkd队列算法

beanstalkd队列算法
EN

Stack Overflow用户
提问于 2016-08-07 10:07:55
回答 1查看 203关注 0票数 0

我正在处理大量的包裹以进行追踪。我有mongodb,其中每个用户都有不同的包。目前有20多家公司(tnt、fedex、dhl等),每家公司只允许有限制的单一跟踪或批量跟踪(如tnt=1、fedex=20和dhl=10)。

我试图找到一种方法来排队跟踪作业,它有效地使用了批处理。例如,如果我总共有50个联邦快递职位、3个tnt职位和11个dhl职位,我想按如下方式排队

代码语言:javascript
复制
[fedex job:[20 jobs]][fedex job:[20 jobs]][fedex job:[10 jobs]]
[tnt job:[1 job]][tnt job:[1 job]][tnt job:[1 job]]
[dhl job:[10 job]][dhl job:[1 job]]

我怎样才能实现上述工作方案?

编辑

我想用一个或多个工人在beanstalkd上运行这个程序。因此,独立状态是非常重要的。Beanstalkd的工作应该如下所示

代码语言:javascript
复制
{
'slug':'fedex'
'trackingNumbers':[11,22,33....] //20
}

{
'slug':'tnt'
'trackingNumbers':[11,22,33....] //10
}

{
'slug':'dhl'
'trackingNumbers':[11] //1
}

{
'slug':'tnt'
'trackingNumbers':[11,22,33....] //10
}

{
'slug':'fedex'
'trackingNumbers':[11,22,33....] //20
},

{
'slug':'dhl'
'trackingNumbers':[11] //1
}

我真的不知道,也许有一个MongoDB函数可以将每个用户的包聚合到上面的块。

这是我的猫鼬模型

代码语言:javascript
复制
var UserSchema = mongoose.Schema({
    email: {type: String, index: {unique: true, sparse: true}},
    password: String,
    createdOn: {type: Date, default:Date.now },
    purchaseDate:Date,
    expiryDate:Date,
    purchaseID: {type: String, index: {unique: true, sparse: true}},
    isEnabled: {type: Boolean,default: true}
});

UserSchema.virtual('parcels',{
    ref: 'Parcel',
    localField:'_id',
    foreignField:'owner'
});

var ParcelSchema = mongoose.Schema({
    owner : { type:mongoose.Schema.Types.ObjectId, ref: 'User' },
    dna:String,
    name: String,
    count: {type: Number, default: 1},
    trackingNumber: String,
    slug:String,
    isDelivered: {
        type: Boolean, default: false
    },
    startDate: {type: Date, default:Date.now },

    updateDate: Date,
    finishDate: Date,
    expectedDate: Date,
    extra:String,
    details:[{
        _id:false,
        message: String,
        location: String,
        date: Date,
        status: Number
    }]
});
EN

回答 1

Stack Overflow用户

发布于 2016-08-07 15:18:28

这是一个建议。你可以这样做:

  • 每个送货公司都有一根管子,例如fedexdhl等。
  • 只将一个员工连接到一个队列中(但您可能有任意数量的员工)
  • 每个工作人员都应该在stats-tube <tube>之前使用Beanstalkd的reserve命令。stats-tube返回此队列中当前保留的作业数(命令的YAML输出中的字段current-jobs-reserved )
  • 因此,您的工作人员确保它处理的队列不会违反SLA。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38813049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档