我正在设计一个应用程序,我有两个想法(下面)。我有一个收集数据appx的过程。 30 KB,此数据将每5分钟收集一次,需要在客户端更新(网络端 - 在任何给定时间100个用户)。收集的信息无需存储以备将来使用。
选项:
我可以每隔5分钟获取数据并插入数据库。然后,客户端将调用DB并检索数据并更新UI。
收集数据并将其放入主题或队列中。现在,多个客户端(消费者)可以进入队列并获取数据。
我正在寻找选项2作为更好的解决方案,因为它更快(没有数据库调用)并且没有存储冗余。
任何人都可以建议哪种解决方案是理想的解决方案?为什么?
答案 0 :(得分:0)
我真的不明白其中的区别。数据必须暂时存储在某个地方,直到下一次更新,正确。
但是所有用户都可以看到它,而不仅仅是第一个到达那里的人,对吧?因此,根据我对系统的解释,队列并不是一个合适的数据结构。
数据是写入持久性的数据库,还是像Web服务器或应用程序服务器那样不那么持久的数据可能与此相关。
此外,您已将此标记为实时,但我没有看到网络客户端如何在没有某种推/长拉或其他任何情况下实时获取更新。
答案 1 :(得分:0)
在我看来,您需要使用队列和发布者/订阅者模式。 这是一篇关于RabitMQ and Publish/Subscribe pattern的文章。
我可以每隔5分钟获取数据并插入数据库。然后客户端调用DB并检索数据并更新UI。
您可以将应用程序编程为面向事件。例如,提升域事件并为您的订阅者发布您的消息。
当您使用队列时,订阅者会将发送给他的消息出列,并且,服从订单(FIFO)。此外,还有一个交付保证,不同于可以删除记录的数据库,但并非每个“订户”都收到了消息。
使用数据库完成此任务的缺陷是: