我在 1GB Linode (VPS) 上安装了 MongoDB + Apache。
MongoDB 有 1.5M+ 条记录。该服务完全依赖的脚本的多个实例导致 50+ 个活动连接和每秒约 50 个查询。
我的free -m
输出
total used free shared buffers cached
Mem: 995 974 21 0 4 823
-/+ buffers/cache: 145 849
Swap: 511 79 432
现在,该脚本每个实例需要约 17MB(已优化),并且正如我所说,多个实例运行。可用缓存内存(849 MB!)和实际可用内存(21 MB)之间存在巨大差异。我无法运行 PHP 脚本的实例,我收到内存分配失败的错误。
MongoDB 占用了大部分内存,这也导致 CPU 使用率过高250+ %
。这毫无用处,我甚至可以在 849 MB 内运行许多 PHP 脚本实例。我想知道远程托管 MongoDB 是否更好(我更喜欢 MongoHQ)。他们有一个每月 15 美元的计划,对我来说还算合理。我可以降级到 768 MB 的 linode,即使没有 MonogDB 在其上运行,这也足够了。
但是,使用远程托管数据库的缺点是什么?每秒 50 多个连接和约 50 个查询?接下来会有带宽问题。
任何帮助是极大的赞赏。
答案1
如果您要远程运行数据库,请在与应用服务器相同的网段或至少相同的数据中心运行它。
即使延迟很低(比如 < 10 毫秒),也会根据数据负载类型影响查询。
此外,您最终会为系统添加另一个故障点,应用程序服务器和数据库服务器之间的通信可能会失败。MongoDB 在其协议上不使用任何加密,除非您以某种方式进行隧道传输,否则您的数据将在天知道多少跳之间清晰地传输。而且,正如您所指出的,还有带宽使用。总的来说,我建议您获取另一个节点来运行您的数据库,但要与您的应用程序服务器位于同一位置。