2017-12-13 3 views
1

私はMongoDBとのインターフェースにREST APIサーバーとしてEveを使用しています。Eve(Python)はフィルタリングされたクエリを返すのに時間がかかりますが、フィルタリングされていないクエリは素早く処理できますか?

実行中: GET /year_origin_destination_hs07_4?where={}はほぼ瞬間的です(33Mアイテムのコレクションの最初のページを返します)。

対照的に、実行中:GET /year_origin_destination_hs07_4?where={"origin": "chn"}は、戻るまでに約18秒かかります(956kアイテムの最初のページ)。

これはなぜをとっているのか説明できますか?? MongoDBでのこの接続のフィルタリングにはほとんど時間がかかりません。

のMongoDB例:OPTIMIZE_PAGINATION_FOR_SPEED:ページ分割結果を返すdb.year_origin_destination_hs07_4.find({origin: "chn"}) < 1S

答えて

1

は、私は、このフラグを有効にする必要がありましたが判明します。ここにいる理由

理由:改ページのパフォーマンスを向上させるためには、これをtrueに設定Python Eve Documentation

。最適化が有効な場合、大きなコレクションでは遅くなるカウント操作はデータベースで実行されません。これにはいくつかの影響があります。まず、ドキュメントカウントは返されません。第2に、HATEOASの精度はそれほど正確ではありません。最後のページリンクは使用できず、最後のページでも次のページリンクが常に含まれます。大きなコレクションでは、この機能をオンにするとパフォーマンスが大幅に向上します。既定値はFalseです(パフォーマンスは低下します;ドキュメント数は含まれています;正確なHATEOAS)。

関連する問題