2017-03-24 7 views
0

私はMongoDBの初心者ですので、私はそれについていくつかの質問があります。まず、私のコードはPHPで書かれています。次のように使用の私の状況は次のとおりです。 :MongoDBの典型的な使用

  • はI 80,000の文書が1つのコレクション
  • 各文書は、この構造を有しているに保存されている(キーは、各文書の異なる値で、1から20まで可能)
    { 
        "_id": "58c91c8059b0a500083dab0c", 
        "year": "2017", 
        "month": "03", 
        "day": "15", 
        "data": { 
         "key-1": "value-1", 
         "key-2": "value-2", 
         "key-n": "value-n" 
        } 
    } 
    

    特定のキーを持つすべてのドキュメントを取得し、その値を合計したいと考えています。だから私はこのコードを使用:

    $manager = new \MongoDB\Driver\Manager(MONGO_SERVER); 
    
    $filter = array ( 
        "year" => $_POST['time_year'], 
        "month" => $_POST['time_month'], 
        "day" => $_POST['time_day'] 
    ); 
    
    $options = [ 
        'projection' => ['_id' => 0], 
    ]; 
    
    $query = new \MongoDB\Driver\Query($filter, $options); 
    $rows = $manager->executeQuery('REPORT.xxxxxxx', $query); 
    
    foreach ($rows as $entry) { 
        [..] 
    } 
    

    をしかし、私はこのエラーを取得しています:だから

    Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) 
    

    、この問題から、私はこの質問を持っている:MapReduceので

    1. が可能回避することができこの問題?
      • 私はMapReduceのいくつかの例をPHPで調べましたが、すべての例でMongoCodeを使用しました。いくつかの研究をしてみると、クラスMongoCodeは廃止され、代替手段はないことがわかりました。
      • 同じ結果を得る他の方法はありますか(MongoDB \ Driver)?
    2. PHPはMongoDBの使用に最適な言語ですか? Node.jsはもっと良い選択でしょうか?
    3. ファイル数を増やす(1日あたり80,000):これはMongoDBの問題でしょうか?
+0

こんにちはbr1luca、と歓迎するスタックオーバーフロー。私はあなたのアプローチに関するいくつかの質問があります:まず、(特定の日付の)すべてのレコードをフェッチして、それらの値を合計しようとする前にPHPに戻しているようです。可能ならば、dbサーバ上でフィルタリングと集計を行う方が良いのではないでしょうか? –

+0

彼らはどれくらいの価値がありますか?例えば。私はdata.key-1の中でal valueを合計したい。たぶん私は間違った方法でMongoDBを使用しています。 – br1luca

答えて

0

MongoDBのメモリプールとそれを制御する方法に問題があります。あなたのシステムに基づいてさまざまな方法で行われます。

しかし、それ以前であっても、PHPの観点からコードに近づいています。 $ unwindや他のMongoDBのデータ操作関数を見てみましょう。

提案:mongod.confファイルを理解して設定し、システムでどのようなオプションが意味するのかを理解してください。次に、ドキュメントを使ってMongoがデータを取り出す方法の違いを見てみましょう。

mongoとの最良の言語としては、おそらく多くの回答が得られます。 Node.jsドライバは公式にMongoによってサポートされており、MongoはまさにNode.jsを使用しています。 (PHPをMySQLに、Node.jsと同じMongoDBと考えてください)。私は多くの人がそのアナロジーを主張すると確信していますが。 しかし、私自身はPHPプログラマーとして、MongoでPHPを使うことは考えていません。ノードは、私が過去2年間に見て観察した限り、単にモンゴの自然なパートナーです。

関連する問題