MongoDB用于实时Ajax操作吗?

2 投票
2 回答
1775 浏览
提问于 2025-04-16 04:37

大家好,StackOverflow的朋友们!

我最近在研究一些NoSQL数据库,比如MongoDB、CouchDB等等。不过我对实时数据处理还不是很确定,所以想问问有没有人有实际的经验可以分享。

我们来想象一下一个网站的场景,假设我们有一个非常动态的、使用了很多AJAX技术的网络应用,它每5到20秒就会请求各种数据。我们的后台可能是用Python、PHP,或者其他语言(反正不是Java)。在这种情况下,如果用户很多,MySQL或者类似的数据库肯定会很吃力。那么,MongoDB或者CouchDB能否轻松应对这种情况,而不需要搞得特别复杂,比如建立超级复杂的集群或缓存解决方案呢?

这就是我的问题。如果你觉得不行,我知道还有很多其他的解决方案,比如nodeJS、websockets、反重力、虫洞超级技术等等,但我现在主要想了解这些NoSQL数据库,特别是它们能否处理这种情况。

假设我们有5000个用户同时在线,每5、10或20秒就会发出AJAX请求来更新各种界面。

请分享你的看法;]

2 个回答

0

这主要取决于运行这个NoSQL解决方案的服务器、数据量等等。我玩过MongoDB,发现设置多个服务器同时运行非常简单。你可以在同一台机器上启动多个实例,让它们像一个集群一样工作,这样就能处理很多用户同时访问的情况。幸运的是,MongoDB会处理所有的细节,所以你可以随时关闭或添加服务器,而不会影响到系统的运行(这取决于你使用的版本)。默认情况下,我记得最大连接数是1000,所以如果你的服务器能承受的话,启动5个服务器就足够了。不过实际上,你可能不会在同一时间有5000个用户同时在线。

希望为了你的硬件考虑,至少能想出一个解决方案,能在完全获取数据之前检查一下是否有新数据可用。可以通过时间戳或者使用Memcache等方式来实现。

总体来说,我认为NoSQL在获取数据时会比传统数据库快很多,前提是你不是在运行报告等操作,而且你的数据存储设计足够聪明,能够弥补缺少复杂连接的问题。

2

假设我们有5000个用户同时在线,每隔5、10或20秒就会发送ajax请求来更新不同的界面。

好吧,简单说就是你在说每秒要处理250到1000次写入?没问题,MongoDB可以应付得来。

影响性能的关键在于这些操作是查询、更新还是插入。

对于查询来说,MongoDB大概能处理这样的负载。主要看数据大小和内存大小的比例。如果你的服务器只有1GB的内存,但数据有150GB,那你可能无法达到每秒250次查询(无论用什么数据库技术)。不过,如果硬件配置合理,MongoDB在单个64位服务器上可以达到这个速度。

如果你有5000个活跃用户,并且不断更新已有记录,那么MongoDB会非常快(和在单台机器上更新memcached差不多)。原因很简单,MongoDB可能会把记录保存在内存中。所以用户每5秒发送一次更新,内存中的对象就会被更新。

如果你不断插入新记录,那么限制主要在于吞吐量。当你写入大量新数据时,也会迫使索引扩展。所以如果你打算输入几个G的新数据,就有可能让磁盘的吞吐量达到极限,那时候你就需要分片了。

根据你的问题,看起来你主要是在查询和更新。你会写入新记录,但不会达到每秒1000条新记录。如果是这样的话,MongoDB可能很适合你。它确实能解决很多缓存方面的问题。

撰写回答