1

このクエリがあります

db.tablebusiness.find({ "経度緯度" : { "$within" : { "$centerSphere" : [[106.772835, -6.186753], 0.0089967464101566] } }, "indexContents" : { "$all" : ["warung" ] }, "目立つ" : { "$gte" : 15 } }).limit(50);

問題: mongodb ウィンドウでは、このクエリは 1 秒未満ですばやく実行されますが、ubuntu サーバー amazon では、このクエリは実行されません。1分かかりました。

もちろん、Amazonサーバーのメモリ不足などの問題があります(私のローカルホストには8GBのメモリがあります)。しかし、パフォーマンスの違いは巨大です。

たとえば、私のローカルサーバーでは、1000000 スレッドを実行できます。そのアマゾンのことは、1つまたは2つのクエリのようにしか実行されません。

両方ともインデックスされています。実際、Amazon サーバーは、私のローカルホストの正確なコピーです。ファイルを localhost から amazon にアップロードするだけです。

どちらもインデックスされています。実は最近、アマゾンにインデックスを追加しました。

localhost のインデックスは次のとおりです。

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

amazon のインデックスは次のとおりです。

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

また、追加します

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

私のubuntuサーバーamazonで何が悪いのか誰か知っていますか?

localhost の dbserverever は

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 の dbserverever は

 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 があるが、それでも遅い場合は、データ セットがまだメモリ内にない可能性があります (ローカル マシンに挿入してこれらのクエリを何度も実行した可能性があるため、データ セットはローカル マシン上にあります)。最初の実行と 2 番目の実行を比較しましたか?

また、インスタンスによっては、十分な CPU リソースがない場合があります。マイクロおよびスモール インスタンスには多くの馬力がなく、クエリはやや複雑です。Amazon の CPU 使用率を調べて、インスタンスのサイズが適切であることを確認します。

最後に、多くの人が Amazon で MongoDB を正常に実行していますが、EC2 環境を最大限に活用するには、制限と推奨事項を認識する必要があります。Amazon での実行に関する優れたプレゼンテーションがここにあります。

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 に答える