【问题标题】:Save chat room data in Application variable or DB, where is better?将聊天室数据保存在应用程序变量或数据库中,哪个更好?
【发布时间】:2011-05-04 19:38:42
【问题描述】:

我的应用是 Web App Chat Room,它支持以下功能:

1.创建/加入/关闭房间
2.在房间内发送消息(只是实时消息,未来可能支持离线消息)

我已经完成了应用程序的逻辑,但我正在考虑将聊天室数据(消息、房间信息和房间内的用户)保存在哪里?我看到有 2 个选项:

1.应用程序变量
2。使用文件或数据库

-如果我保存在应用程序变量中会怎样:
如果有 2000 个房间和 10000 个用户在线,意味着我必须持久化 2000 个房间的应用程序变量(实际上在 RAM 内存中)信息,超过 10000 条消息(文本),如果有更多,这些数字可能会增加秒用户实时在线。下一步是什么?我不知道服务器会发生什么,崩溃?或者我的网络应用程序将被终止?不管我不想要两个结果!

-如果我保存在文件或 DB(即:SQL Server DB)中会怎样
由于 Web 应用程序,客户端必须每 1 秒发送一次请求以获取数据(房间中的消息和用户列表)。因此,如果有 2000 个房间和 10000 个在线用户,则意味着他们每 1 秒将向 DB 发出 10000 个请求。我不知道 DB 会发生什么,有很多连接,并且在每 1 秒内,DB 是否还活着来服务请求?

我不知道现在储蓄在哪里好,因为两者似乎都是不好的解决方案:(。你的意见是什么?请给我一些想法?非常感谢!

【问题讨论】:

  • "由于 web 应用,客户端必须每 1 秒发送一次请求" 这是为什么?这是你的第一个问题。您应该使用 BOSH 或 Comet 之类的东西。另外,您是否有充分的理由不使用现成的 XMPP 服务器?
  • 我的网站是 Asp.net MVC 应用程序,似乎它只在 IIS 服务器上运行。我以前从未听说过 BOSH 或 Comet 或 XMPP 服务器,它与 IIS 一起运行还是可以替换 IIS 来托管我的 asp 网络聊天?你能告诉我更多关于他们的信息吗?
  • 当然,XMPP 是一种用于实现聊天的开放协议(曾经称为“Jabber”)。有许多 XMPP 服务器可以完成实现协议的所有工作。 BOSH 和 Comet 是利用 Ajax 促进双向 HTTP 流的 Javascript 技术(HTTP 是请求/响应,而普通的套接字编程寿命很长,并且允许重复来回通信——非常适合聊天)。对于 Javascript 端,我推荐 blog.jwchat.org/jsjac 对于服务器端,请参阅 en.wikipedia.org/wiki/Comparison_of_XMPP_server_software
  • 哦,真是有用的资源!您是否曾经使用 XMPP 服务器和 Ajax 客户端库开发过用于回调 XMPP 服务器的 Asp.net MVC Web 应用程序?我没有那么多预算购买像 lightstreamer 服务器这样的服务器,我的 asp.net web 应用程序需要提供超过 10000 个连接,你有什么建议可以与 asp.net 集成的免费 XMPP 服务器mvc web 应用程序,可以提供这些连接的数量?

标签: asp.net asp.net-mvc asp.net-mvc-2 asp.net-ajax


【解决方案1】:

数据库是为此而设计的,可以发出大量请求,写入和读取数据......它们有很好的优化,不会写下你所知道的一切,它们使用缓存和内存来实现你所说的。

我说使用数据库,只要注意做好表格设计。 :) 并不时从您的房间中删除旧的和未使用的数据。

【讨论】:

  • 感谢您的建议,Aristos。
猜你喜欢
  • 2020-06-13
  • 2018-02-04
  • 2014-10-01
  • 2012-04-14
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2013-03-05
  • 2014-05-22
相关资源
最近更新 更多