1

我有这个查询

db.tablebusiness.find({ "LongitudeLatitude" : { "$within" : { "$centerSphere" : [[106.772835, -6.186753], 0.0089967464101566] } }, "indexContents" : { "$all" : ["warung" ] }, "突出" : { "$gte" : 15 } }).limit(50);

问题:在 mongodb windows 中,这个查询运行速度很快,不到 1 秒,但在 ubuntu server amazon 中,这个查询没有运行。花了1分钟。

当然,亚马逊服务器内存不足(我的本地主机有 8GB 内存)等问题。但是性能上的差异是巨大的。

例如,在我的本地服务器中,我可以运行 1000000 个线程。亚马逊的东西只运行 1 或 2 个查询。

两者都有索引。实际上,亚马逊服务器是我的本地主机的精确副本。我只是将文件从本地主机上传到亚马逊。

它们都被索引。事实上,最近我在亚马逊上添加了额外的索引。

localhost 的索引是:

{LongitudeLatitude :"2d",indexContents :1,Prominent:-1}

亚马逊的指数是:

{LongitudeLatitude :"2d",indexContents :1,Prominent:-1}

我们还添加

{LongitudeLatitude :"2d",Prominent:-1} latter to no effect

有谁知道我的 ubuntu 服务器亚马逊有什么问题?

本地主机上的 dbserver 是

db.runCommand("buildInfo")
{
        "version" : "2.0.7",
        "gitVersion" : "875033920e8869d
        "sysInfo" : "windows sys.getwin
 platform=2, service_pack='Service Pack
        "versionArray" : [
                2,
                0,
                7,
                0
        ],
        "bits" : 64,
        "debug" : false,
        "maxBsonObjectSize" : 16777216,
        "ok" : 1

ubuntu amazon 上的 dbserever 是

 db.runCommand("buildInfo");
{
        "version" : "2.0.7",
        "gitVersion" : "875033920e8869d284f32119413543fa475227bf",
        "sysInfo" : "Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41",
        "versionArray" : [
                2,
                0,
                7,
                0
        ],
        "bits" : 64,
        "debug" : false,
        "maxBsonObjectSize" : 16777216,
        "ok" : 1
}
4

1 回答 1

2

这里的答案很可能是 RAM - 如果您希望这样的查询在 Amazon 中快速运行,那么他们正在处理的数据集(也称为工作集),即索引 + 数据,必须适合 RAM。每当您必须在 Amazon 实例上访问磁盘(页面错误)时,您将使用 EBS,这意味着您将使用网络。与本地磁盘相比,这不会很快,而且肯定会比访问 RAM 中的数据慢几个数量级。

如果 Amazon 实例有足够的 RAM 但仍然很慢,那么数据集可能还没有在内存中(它可能在您的本地机器上,因为您可能已经将它插入到该机器上并多次运行这些查询)。你有比较过第一次和第二次吗?

此外,根据您的实例,您可能没有足够的 CPU 资源。微型和小型实例的功能并不强大,而且您的查询有些复杂 - 我会查看 Amazon 上的 CPU 利用率,以确保您的实例大小足够。

最后,我要说很多人在 Amazon 中成功运行了 MongoDB,但您必须了解限制和建议,以充分利用 EC2 环境。这里有一个关于在亚马逊跑步的精彩演示:

http://www.10gen.com/presentations/MongoNYC-2012/MongoDB-on-Amazon%20EC2

还有 Amazon/EC2 注释页面:

http://www.mongodb.org/display/DOCS/Amazon+EC2

于 2012-08-28T10:34:04.640 回答