私は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ので
- が可能回避することができこの問題?
- 私はMapReduceのいくつかの例をPHPで調べましたが、すべての例でMongoCodeを使用しました。いくつかの研究をしてみると、クラスMongoCodeは廃止され、代替手段はないことがわかりました。
- 同じ結果を得る他の方法はありますか(MongoDB \ Driver)?
- PHPはMongoDBの使用に最適な言語ですか? Node.jsはもっと良い選択でしょうか?
- ファイル数を増やす(1日あたり80,000):これはMongoDBの問題でしょうか?
- が可能回避することができこの問題?
こんにちはbr1luca、と歓迎するスタックオーバーフロー。私はあなたのアプローチに関するいくつかの質問があります:まず、(特定の日付の)すべてのレコードをフェッチして、それらの値を合計しようとする前にPHPに戻しているようです。可能ならば、dbサーバ上でフィルタリングと集計を行う方が良いのではないでしょうか? –
彼らはどれくらいの価値がありますか?例えば。私はdata.key-1の中でal valueを合計したい。たぶん私は間違った方法でMongoDBを使用しています。 – br1luca