当前位置: 首页 > 知识库问答 >
问题:

我应该在数据库中保留多少Web推送订阅对象?

汪思博
2023-03-14

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

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

场景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
});

提前谢谢

共有1个答案

叶光华
2023-03-14

这是一个权衡的问题:

  1. 如果让你的应用免费更重要,那就让它驱动设计决策,即使这意味着有一个不太有用/功能的系统。
  2. 如果拥有更好和更有用/功能的系统更重要,那么要么接受成本,要么在不影响功能的情况下努力将成本降至最低。这可能包括寻找孤儿记录/设备并删除它们的功能。

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

 类似资料:
  • 通讯方式: 通讯采用HTTP(S)协议,POST方式发生json格式的报文 json格式请求: Content-Type:application/json;charset=utf-8 json格式返回: Content-Type:application/json;charset=utf-8 返回响应说明: 商户处理后同步返回给果盘参数:{"status":1,"info":"返回信息"} json

  • 通讯方式: 通讯采用HTTP(S)协议,POST方式发生json格式的报文 json格式请求: Content-Type:application/json;charset=utf-8 json格式返回: Content-Type:application/json;charset=utf-8 返回响应说明: 商户处理后同步返回给果盘参数:{"status":1,"info":"返回信息"} json

  • 我花了很多时间来解决我的这个问题,阅读文档多次,谷歌在这里和那里:SO,Laracast,Larachat等,但仍然无法让Laravel回声订阅推动者存在频道,它没有显示任何错误在控制台选项卡 公共和私人频道工作正常,用户可以订阅,用户可以监听/触发事件 注意:在创建这篇文章之前,我有一些与我的当前问题相关的搜索问题,它们都没有答案 一些和我类似的问题: https://laravelquesti

  • 关于编译器(GCC)所做的优化,标准做法是什么?每个选项(-O、-O1、-O2、-O3、-Os、-s、-fexpensive-optimizations)有什么不同,我如何决定什么是最优的?

  • 什么时候应该存储实例并在NgOnDestroy生命周期中调用,什么时候可以简单地忽略它们? 保存所有订阅会给组件代码带来很多混乱。 HTTP客户端指南忽略订阅,如下所示: 在同一时间的路线和导航指南说: 最终,我们会在别的地方导航。路由器将从DOM中删除该组件并销毁它。在那发生之前我们需要自己清理干净。具体地说,我们必须在Angular破坏组件之前退订。否则可能会造成内存泄漏。 我们在方法中取消订

  • 问题内容: 我最近在Netbeans(6.7)中增加了对Profiler的使用,这是一个很棒的工具。 我有一个问题。进行堆转储时,可以在摘要页面(期望窗口)上“按保留的大小查找最大的对象”。 这个值是什么,如何将其用于分析内存使用情况? 问题答案: 对象的保留大小是该对象从垃圾回收保留的内存量。 形式上的定义是“对象的大小加上递归仅由第一个对象引用的所有对象的大小”。 有关保留的内存是什么的更多说