【问题标题】:JS Send notification based on user settingsJS 根据用户设置发送通知
【发布时间】:2017-06-20 23:53:23
【问题描述】:

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: javascript node.js notifications stocks stockquotes


    【解决方案1】:

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

    这种方案具有以下优点:

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

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

    【讨论】:

    • 请耐心等待 - 我打算标记答案,但昨晚发生的事情让我无法立即检查。感谢您的回复。
    • 赞成但如何让每只股票的观察者不进行 O(n) 扫描?我假设每个观察者都会保留一份在该资产下设置的所有价格的列表,并且您会遍历它们,对吗?
    • @PirateApp - 好吧,这是不久前的事了,但用户列表可以按价格触发顺序排序。因此,当价格发生变化时,您检查列表的低端并查看最低价格是否需要更改通知。如果是这样,您通知他们并将列表向上移动到下一个。如果仍低于通知阈值,则通知他们。您只需沿着列表向上走,直到下一个通知价格高于阈值并停止。因此,您正在从低到高遍历列表的一部分,但只有那些无论如何都需要通知的(再加上一个不需要通知的)。
    • 感谢您的澄清,我不仅有价格,因此想知道这种方法如何工作
    • @PirateApp - 如果你愿意,你可以发布你自己的问题和你自己的具体要求。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多