Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS根据用户设置发送通知_Javascript_Node.js_Notifications_Stocks_Stockquotes - Fatal编程技术网

Javascript JS根据用户设置发送通知

Javascript JS根据用户设置发送通知,javascript,node.js,notifications,stocks,stockquotes,Javascript,Node.js,Notifications,Stocks,Stockquotes,我正在构建一个基本的股票观察应用程序——让我们调用当前观察的股票N。当股票移动X%时,触发一个通知/事件。X是基于每个用户定义的 服务器保存股票的当前价格,以及用户最后的已知价格(每个用户收到的最后一个警报) 构建此架构的最佳方式是什么?我不想在任何价格变动时通过每个用户来检查他们的移动百分比是否达到,因为这显然是一个巨大的性能问题 资源和进一步研究的链接将不胜感激 我正在用Javascript(确切地说是nodeJS)构建它,但我更感兴趣的是构建它背后的概念,而不是直接的代码示例 谢谢 数据库

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

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

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

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

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


谢谢

数据库中的用户集合应该有一列来保存用户的X百分比。比如说<代码>x列

设置侦听器进行百分比更改时,只需将用户的
x\u col
传递到条件字段中。 (即,如果刚刚发生的更改是
=user.x\u col
抛出通知。)


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

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

这类计划有以下优点:

  • 找出在给定价格变动到新价格后应该通知哪些用户是简单而快速的
  • 这与用户总数无关,因此它可以扩展到大量用户
  • 对于给定的股票,您只需与关注该特定股票的用户打交道,而不必与整个用户群打交道
  • 添加一个用户通知只是一个排序插入列表(对触发价格进行二进制搜索并插入到列表中-已知的插入算法)

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

    请耐心等待-我本打算标记一个答案,但昨晚发生的事情阻止了我立即检查。谢谢你的回复。投票结果是一致的,但如果每个股票都有观察者,怎么能不进行O(n)扫描呢?我假设每个观察者都会保存一份该资产下设置的所有价格的列表,你会循环查看它们,对吗?@PirateApp-这是不久前的事了,但用户列表可以按价格触发顺序排序。因此,当价格发生变化时,您可以查看列表的低端,看看最低价格是否需要变更通知。如果是这样的话,你会通知他们,然后从列表中走到下一个。如果仍低于通知阈值,则通知他们。您只需沿着列表向上走,直到下一个通知价格高于阈值,然后停止。因此,您将列表的一部分从低到高,但只需要通知那些需要通知的(再加上一个不需要通知的)。感谢您的澄清,我不仅仅有价格,因此想知道这种方法会如何work@PirateApp-好吧,如果你愿意,你可以用你自己的具体要求发布你自己的问题。