【问题标题】:MongoDB for realtime ajax stuff?MongoDB 用于实时 ajax 的东西?
【发布时间】:2010-09-26 16:31:03
【问题描述】:

大家好!

所以我一直在对这些 NoSQL 数据库、MongoDB、CouchDB 等进行一些挖掘。虽然我仍然不确定实时性的东西,因此我想我会四处询问,看看是否有人有任何实践经验。

让我们想想 web 的东西,假设我们有一个非常动态的超级 ajaxified webapp,它每 5-20 秒请求各种类型的数据,我们的后端是 python 或 php 或除 java 之外的任何其他东西......在诸如此类的情况显然是 MySQL 或类似的 db 将承受巨大的压力(有很多用户),MongoDB / CouchDB 是否会毫不费力地运行它并且不需要创建一些超级复杂的集群/缓存等解决方案?

是的,这基本上是我的问题,如果你认为不是......那么是的,我知道有几种类型的解决方案,nodeJS/websockets/antigravity/worm-hole super tech,但我只是对这些 NoSQL 感兴趣自动取款机,更具体地说,如果他们可以处理这种类型的事情。

假设我们同时有 5000 个用户,每 5、10 或 20 秒更新各种接口的 ajax 请求。

射击;]

【问题讨论】:

  • 您为什么不试一试并运行一些基准测试来模拟您预期的高负载?
  • 是的,我正在考虑这样做,但只是想看看是否有人已经对此有一些第一手经验。

标签: php python ajax mongodb real-time


【解决方案1】:

假设我们有 5000 个用户 同一时间,每 5、10 或 20 秒 ajax 请求更新各种 接口。

好的,为了正确理解,您是在说每秒 250 到 1000 次写入?是的,MongoDB 可以处理。

性能的真正关键在于这些是查询、更新还是插入。

对于查询,Mongo 可能可以处理这个负载。这实际上是关于数据大小与内存大小的比率。如果您的服务器具有 1GB 的 RAM 和 150GB 的数据,那么您可能不会获得 250 次/秒的查询(使用任何数据库技术)。但是通过合理的硬件规格,Mongo 可以在单个 64 位服务器上达到这个速度。

如果您有 5,000 个活跃用户并且您不断更新现有记录,那么 Mongo 将会非常快(与在单台机器上更新 memcached 相当)。这里的原因很简单,Mongo 很可能会将记录保存在内存中。因此,用户将每 5 秒发送一次更新,并且内存中的对象将被更新。

如果您不断插入新记录,那么限制实际上将是吞吐量之一。当您写入大量新数据时,您也在强制索引扩展。因此,如果您打算注入 Gigs 的新数据,那么您可能会面临磁盘吞吐量饱和的风险,并且您需要进行分片。

因此,根据您的问题,您似乎主要是在查询/更新。您将写入新记录,但不是每秒 1000 条新记录。如果是这种情况,那么 MongoDB 可能适合您。它肯定会解决很多缓存问题。

【讨论】:

  • 太棒了,你是对的,我将主要更新/获取现有数据。
  • 感谢您区分查询、更​​新和插入
【解决方案2】:

这在很大程度上取决于运行上述 NoSQL 解决方案的服务器、数据量等......我已经玩过 Mongo 了,它很容易设置多个服务器同时运行,你很可能能够完成通过在同一个盒子上启动多个实例并让它们像集群一样运行来实现高并发性。幸运的是,至少 Mongo 处理了所有细节,因此可以在不跳过节拍的情况下杀死和引入服务器(取决于版本)。默认情况下,我认为最大连接数为 1000,因此使用上述配置启动 5 个服务器就足够了(如果您的服务器显然可以处理它),但实际上您很可能永远不会同时达到 5000 个用户。

为了您的硬件,我希望您至少能想出一个解决方案,该解决方案可以在全面提取之前检查新数据是否可用。通过时间戳或 Memcache 等...

总体而言,我倾向于相信 NoSQL 会比传统数据库快得多,前提是您正在获取数据而不是运行报告等...并且您的数据存储设计足够智能,可以弥补复杂连接的不足。

【讨论】:

  • 是的,这里的设计很重要,幸运的是我所做的事情不需要任何复杂的连接,这就是为什么我认为 MongoDB 可能是完美的。
  • 这绝对是一项甜蜜的技术。最难的是理解如何构建数据——尤其是来自 RDMS 的强大背景。一旦发现,剩下的就是蛋糕了。
  • 是的,这就是我现在想要解决的问题,呵呵,但我看到有一些不同的 ORM 以及 MongoDB 的“ODM”,比另一个更好吗?
  • 我倾向于不使用 ORM。特别是对于 Mongo 来说不是,因为它已经以 JSON 格式提供数据 - 只需要在结果上调用 json_decode ,你就可以得到一个 PHP 数组。非常好。不过,似乎确实有一些选择。 Doctrine 将是一个明显的选择,但我想还有一些更轻量级的项目。如果你找到一个不错的,请告诉我们!
  • 你会发现 ORM / ODM 真的是鱼龙混杂。 “ORM”的问题是您需要在没有连接的数据库中“映射关系”的概念。也就是说,我认为用一个类包装“对象”以实现更一致的处理是公平的。 (但这通常是你所需要的)就我个人而言,对于 PHP,我构建了自己的:github.com/gatesvp/MonogoModel(仍在编写文档,发消息给我快速介绍,代码用于大型产品系统)
猜你喜欢
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2013-04-02
  • 2021-10-21
  • 2013-02-24
相关资源
最近更新 更多