2

私はmongodbで約1億件のレコードを処理しようとしています。基本的に、各キー(処方番号)は約1300レコード(一意ではありません)に対応します。これらのキーにはインデックスが付けられています。

現在、pymongoで特定のキーをクエリして、これらの結果のセットを返し、Pythonで処理できるようにしています。

mongoのクエリは、最大のボトルネックです。クエリごとに約20秒かかります。現在のレートでは、すべてのレコードをクエリするのに400時間かかります。

これは、クエリを「説明」したときのように見えます。

db.prescriptions.find({'key':68565299}).explain()

                            {
    "cursor" : "BasicCursor",
    "nscanned" : 103578563,
    "nscannedObjects" : 103578563,
    "n" : 1603,
    "millis" : 287665,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {

    }
}

そして、これは私が適切なインデックスを持っていることを示しています

> db.prescriptions.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "ns" : "processed_data.prescriptions",
        "name" : "_id_"
    }
]

1つのサーバーインスタンスでこのデータ処理を実行しようとして、私はロッカーから離れていますか?(興味深いことに、トップを実行したときにCPUとRAMが最大になっていないようです。)

アドバイスをいただければ幸いです。

ありがとう!!

4

1 に答える 1

3

インデックスを追加する

クエリのExplain結果から、「key」にインデックスがないため、追加する必要があります。

> db.prescriptions.addIndex({'key': 1});

mongoが何らかの警告を報告した場合は、それを実行する必要があります

于 2012-09-02T16:56:28.757 に答える