JS根据用户设置发送通知

时间:2017-06-20 23:53:23

标签: javascript node.js notifications stocks stockquotes

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

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

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

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

我在Javascript(精确地说是nodeJS)中构建它,但我对构建此代码而非直接代码示例的概念更感兴趣。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以拥有每个股票的观察者列表,这些观察者将是观看该股票的用户列表以及他们的通知触发价格。如果按照触发价格对列表进行排序,则可以轻松地从列表的一端进行遍历,以收集现在应该收到通知的用户的确切列表。在为该用户触发通知后,您可以决定是否为该用户设置新的触发价格,或者从他们的通知已经发送后将其从列表中删除。

这种方案具有以下优点:

  1. 找出在给定价格变为新价格后应该通知哪些用户简单快捷。
  2. 此处没有任何内容与用户总数相关,因此可以扩展到大量用户。
  3. 对于给定的股票,您只需要处理正在关注该特定股票的用户 - 而不是整个用户群。
  4. 添加用户通知只是列表中的有序插入(触发价格的二进制搜索并插入列表 - 已知的插入算法)。
  5. 为了使诸如从系统中删除用户更有效,用户对象可能还会保留该用户正在监视的证券列表(及其触发价格),以便您可以转到每个安全性并删除用户无需搜索所有证券即可从其列表中观察。因此,添加监视会将项目添加到用户对象列表中,并将用户和触发器价格添加到特定于安全性的列表中。

答案 1 :(得分:0)

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

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

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