我很好奇 mongodb 在有限的 vps 中的表现如何。具体来说,我将在具有 128Mb 内存的 32 位 ubuntu 9.04 服务器上部署此配置(更新:现在我也在考虑 360mb)。
- nginx 和 redis
- 三个龙卷风应用程序实例(一个用于移动网站;应用程序有限,不是我的主要受众);大约有 8 个收藏集。为我的社区提供社交网络应用程序。
- mongodb
除了 mongodb 之外的所有数据库似乎都占用很小的空间。从内存映射方面来说,我不知道 mongodb 的表现如何。
我知道在小型 vps 上使用这种配置有点牵强,但这就是我现在能负担得起的。我预计会有……嗯……也许 ~ 50 15rps。我做了很多前端优化,yslow 说是 A 级 91(规则集 V2):-)
有谁愿意分享经验吗?例如,当 mongo 达到上限时数据集大小有多大,当 mongo 进行大量磁盘 IO 时的性能如何,等等。谢谢。
更新:这是我的宠物项目。当我下次有空闲时间在具有精确规格的 vbox 中执行相同的 httperf 时,我会回复您。欢迎就如何进行压力测试提出建议。我对这类东西很陌生。
答案1
是的,我认为这行不通。我目前正在运行的 mongoDB 使用 560MB VIRT、205MB RES。我不知道这与数据集大小如何对应,但我怀疑你会遇到问题。不过,只有一种方法可以确定——试试看。如果你无法升级你的 VPS(你买不起 360MB 的 Linode,那么你买 128MB 的 VPS 能有多便宜?),那么就试试吧,如果不行,就放弃 MongoDB 并使用其他东西。
答案2
我在 VirtualBox vm 中运行~以上配置(+supervisor +errorlogger script -redis)。我加载了 5000 个文档,导致数据大小约为 60Mb(db.mycollection.totalSize())。
在此测试中,/articles 运行两个分页查询和 15 个查询来获取关系文档。
$httperf --hog --num-conn 1000 --timeout 5 --server peduli.vps --uri /articles
# 360Mb box
Connection rate: 7.6 conn/s (131.4 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 118.7 avg 131.4 max 300.0 median 128.5 stddev 12.2
Reply rate [replies/s]: min 6.8 avg 7.6 max 8.0 stddev 0.3 (26 samples)
Reply time [ms]: response 128.8 transfer 2.2
# 128Mb box
Reply rate [replies/s]: min 4.2 avg 6.3 max 7.2 stddev 0.7 (31 samples)
Reply time [ms]: response 154.5 transfer 4.2
$httperf --hog --num-conn 100 --ra 10 --timeout 5 --server peduli.vps --uri /articles
Connection rate: 7.8 conn/s (127.9 ms/conn, <=34 concurrent connections)
Connection time [ms]: min 181.4 avg 2267.7 max 4889.5 median 2421.5 stddev 1209.6
这是 128Mb 'vps' 盒子内 'top' 的快照
Mem: 121528k total, 117532k used, 3996k free, 2732k buffers
Swap: 409616k total, 8244k used, 401372k free, 56904k cached
我的结论是什么?我不知道,需要将配置与用 mysql 替换的 mongodb 进行比较。也许,足够好了?
答案3
您知道 mongodb 使用 mmap 并且只会分配它所接触到的所有 RAM......
答案4
假设 128mb 是 32 位,请记住您的数据限制为 1.8gb