JS 根据用户设置发送通知

JS Send notification based on user settings

我正在构建一个基本的股票观察器应用程序 - 我们将当前观察的股票称为 N。当股票移动 X% 时,触发通知/事件。 X 是基于每个用户定义的。

服务器保存股票的当前价格,以及用户最后知道的价格(每个用户收到的最后提醒)

构建它的最佳方法是什么?我不想在任何价格变动时遍历每个用户以检查是否达到了他们设定的移动百分比,因为这显然是一个巨大的性能问题。

非常感谢进一步研究的资源和链接。

我正在 Javascript(准确地说是 nodeJS)构建它,但我更感兴趣的是构建它背后的概念而不是直接代码示例。

谢谢!

数据库中的用户集合应该有一列来保存用户的 X 百分比。假设... x_col

当您为百分比变化设置侦听器时,只需将用户的 x_col 传递到条件中。 (即,如果刚刚发生的变化是 >= user.x_col 抛出通知。)

上面的用户对象假设您正在为当前登录的用户使用全局对象。如果没有,您可以查询集合以了解文档中的 x_col 值是什么,该文档的信息与您用来检查登录用户的任何唯一信息相匹配。

您可以为每只股票创建一个观察者列表,该列表将是观察该股票的用户列表以及他们的通知触发价格。如果您保持列表按触发价格排序,那么您可以轻松地从列表的一端遍历以收集现在应该被通知的用户的确切列表。为该用户发出通知后,您可以决定是为该用户设置新的触发价格还是将其从列表中删除,因为他们的通知已发送。

此类方案具有以下优点:

  1. 找出在给定价格变动到新价格后应通知哪些用户既简单又快速。
  2. 这里没有任何与用户总数相关的内容,因此它可以扩展到大量用户。
  3. 对于给定的股票,您只需处理正在观看该特定股票的用户 - 而不是整个用户群。
  4. 添加用户通知只是排序插入到列表中(二分查找触发价格并插入到列表中 - 已知插入算法)。

为了更有效地从系统中删除用户等操作,用户对象可能还保留了该用户正在关注的证券列表(及其触发价格),因此您可以转到每个证券并从列表中删除该用户的手表,而无需搜索所有证券。因此,添加手表会在用户对象列表中添加一个项目,并将用户和触发价格添加到特定于安全的列表中。