我正在 signalr 中创建一个聊天应用程序。它目前具有一些存储到数据库以永久存储消息的功能。我想实现用户列表并重新阅读了这篇文章:

http://www.asp.net/signalr/overview/signalr-20/hubs-api/mapping-users-to-connections#inmemory

内存存储之间的差异有多大?比如说,1000 个用户和 10,000 个用户以每秒 1 条消息的正常速率互相发送消息(他们已经吃了很多糖),这之间是否可能存在超过一秒的差异?它有多大用处?任何对之前性能测试的参考都将受到极大的赞赏。

其次,我可能会以错误的方式处理这个问题,但如果我想存储用户列表并且有多个聊天室,我想每个房间都需要一个单独的字典?如果是这样,这是否可行,因为我希望用户也能够生成自己的房间。我只是不明白如何以这种方式实现内存中。

谢谢

有帮助吗?

解决方案

我不想提供一个答案的链接,但这个 OSS 功能齐全的聊天室 https://jabbr.net 解决您担心的一切。

来源: https://github.com/jabbr/jabbr

评论一下您主要关心的内存与数据库:DB 增加了保存数据甚至扩展应用程序的能力,但性能远低于内存。现在不要误会我的意思,尽管它的性能要差得多,但这并不意味着根据您的应用程序需要几秒钟才能发送消息......这都是关于权衡的。

至于将面向数据库的架构应用于 1000 个还是 10,000 个用户,这完全取决于您如何实现它。例如,横向扩展提供程序 REDIS 全部在内存中运行,但随后会定期保存到磁盘。这显然非常快,但会导致“一些”数据丢失。

其他提示

这与您原来的问题没有直接关系。

我认为你不能将它们保存在内存中。 问题是如果应用程序池回收,内存中存储的所有消息都将消失。

你无法预测App Pool什么时候会回收(不过你可以手动设置具体的回收时间)。它可能会在几天或几个小时内发生。

理想情况下,您希望存储在持久位置,例如 数据库. 。如果您担心保存到数据库的性能,您可以 异步 数据库保存任务。

看看这个比较:

http://ruturaj.net/redis-memcached-tokyo-tyrant-and-mysql-comparision/

REDIS(在内存中)显然优于MySQL(经典DB),它们的应用领域有很大的不同,因此我们不能说,通常,Redis比MySQL更好。每个软件项目都是他自己的世界,可以应用很多不同的解决方案。在某些情况下,Redis 和 MySQL 一起用于平台的不同部分(例如Magento 电子商务)

您可以自行评估是否需要内存解决方案或标准数据库。我认为通过MySQL可以轻松实现1次插入/秒的吞吐量,但这只是一个意见。我建议您编写一个“Redis 感知”产品的实现:开始使用 MySQL,但通过一个同时适用于 MySQL 和 Redis 的抽象层来使用它(我不知道这样的层是否开源,但你可以发布自己的......)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top