首页 > 解决方案 > 我应该在数据库中保留多少个网络推送订阅对象?

问题描述

我是网络推送通知的新手,我创建了一个适用于 PC 和移动设备的网络应用程序。我创建了通知,并且由于存储空间有限(Mongo Atlas 中的免费 512 MB),我需要知道我应该在数据库中存储多少推送订阅对象来发送通知?

场景 1:如果用户使用 2 台设备都会收到浮动通知,但如果他丢弃了一台设备,或者更换了浏览器,旧的浏览器条目将变得无用并占用数据库空间。

场景 2:如果用户使用多个设备,我会保留最新设备/浏览器的记录,但这会阻止他在旧设备中收到通知。

哪一个将是最佳的?

子对象的结构:

{"endpoint":"https://fcm.googleapis.com/fcm/send/eDeNLoS7m7M:APA91bF7HHZ6_hujpm47yuikjMNVx247fuLAAkxZbnj_cF2ODmqo-UgU-dKGKYXwNbdq0LS-Ns8eWFFmv52uzQO6agTcEjGMifpfomPwpm8VHEUKxyX3ms7J1aLi34gzKXgdxL8AiAvo",
"expirationTime":null,
"keys": {
  "p256dh":"BBDbLS_UBcaDIEgtK9rzCLYRLzYyrC_f9GGPTymPIT79Wpsn_k9x_vpPEa13DOR5ZZ-ohT-YX4aBHloYx0WpdPE",
  "auth":"f1UCyrwzENKsKec7qa9Myg"
        }
}

集合的猫鼬模式:

const pushNotificationsSchema = mongoose.Schema({
    _id: {type: mongoose.Types.ObjectId, require: true, ref: 'User'},
    subobjects: {type:[Object], default: []},
    time: String
});

提前致谢

标签: node.jspush-notificationarchitecturenotificationsweb-push

解决方案


这是一个权衡问题:

  1. 如果让你的应用程序免费更重要,那就让它来驱动设计决策,即使这意味着有一个不太有用/功能性的系统。
  2. 如果拥有更好、更有用/功能更强大的系统更重要,那么要么接受成本,要么在不影响功能的情况下尽量减少成本。这可能包括查找孤立记录/设备并删除它们的功能。

2 的危险在于,如果它没有用,没有人会使用它。


推荐阅读