JS根据用户设置发送通知



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

服务器持有股票的当前价格,以及用户最后已知的价格(每个用户收到的最后警报)

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

进一步研究的资源和链接将不胜感激。

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

谢谢!

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

这种类型的方案具有以下优点:

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

为了使诸如从系统中删除用户之类的事情更有效率,user对象可能还会保留该用户正在监视的证券列表(及其触发价格),以便您可以转到每个证券并从其列表中删除该用户的监视,而无需搜索所有证券。 因此,添加监视会将项目添加到用户对象列表,并将用户和触发器价格添加到特定于安全性的列表。

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

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

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

最新更新