2017-08-19 5 views
0

私は早すぎる最適化が悪の根源だと読んでいます。時間がかかり、コードが複雑になります。パフォーマンスが大幅に向上しない場合でもデータベースのクエリ数を減らす必要がありますか?

場合によっては、IDで項目を取得する必要が生じることがあります。これはクイッククエリです。

その後、同じリクエストで、このアイテムの情報をもう一度別の関数で必要とします。

もう一度クエリを呼び出すのは悪いですか?または、エンド・ユーザーが気付かないように数ミリ秒を節約したとしても、取り出したオブジェクトを再利用する必要があります。多くのユーザーが同じクエリを同時に実行している場合を除きます。

[OK]を、ここでの例のようになります。

function getItem() 
{ 
    $item = null; 
    if ($someCondition) { 

      $item = $this->repository->getById(1); 
    } 

    someFunction($item); 
} 

function someFunction($item) 
{ 
    if ($item == null) { 

      $item = $this->repository->getById(1); 
    } 

    doSomething($item); 

} 

だからsomeFunctionに、私たちは、チェックを追加 - アイテムをフェッチするかどうかを知るために追加のロジックを。この単純な例では、ロジックを追加するのに問題はありません。

しかし、実際のアプリケーションでは、項目を2回目に最適化してフェッチしないために、さらに多くのロジックを追加する必要があります。

もっと論理 - コードを書いて読む時間が増えます。

ORMは最適化を心配していない例です。ORMはDoctrineのような関連アイテムを遅延ロードするだけです。したがって、開発者として、他のテーブルを結合するクエリを記述しないことで時間を節約できます。

一部のプログラマーは、同じクエリーを2回実行するとそのコードを避けることができます。

場合によっては最適化するのに30分か1時間かかることがあります。追加すると、これにより生産性が低下する可能性があります。

これらのケースではどうすればよいですか?

答えて

0

私は、呼び出しは要件ごとに行われなければならないと思います。 必要なだけデータを照会します。より多くのデータを照会または取得すると、システムリソース、ネットワーク帯域幅を不必要に消費します。 反対に、複数回の往復もシステムに負担をかけることになります。 ページングについて考えてみましょう。検索結果の数は膨大なものになる可能性があり、それぞれの結果は時間がかかるだけでなく、ユーザーにとって不要または冗長です。ユーザーはそれぞれの結果を見ることさえできません。 したがって、必要なデータを事前に把握し、それに応じてコマンドクエリを調整します。 kafkaのようないくつかのシステムでは、要求をより効率的にするためにバッチ処理をサポートし始めました。

+0

これ以上のデータはありません。問題は、同じデータをクエリして、生産性を高め、コード内のロジックが少ないことです。 –

+0

上記の場合、パフォーマンスが低下するだけでなく、メンテナンスも必要になります。 someFunction()は、渡されたオブジェクトに対して、どの項目のアクションを取らなければならないかを知っていても、それを処理しなければなりません。はっきりと明確に定義された責任でより明確になります。 –

関連する問題