1

私は、1.3.x ブランチ上に構築された従来の CakePHP アプリに取り組んでいます。これは、Containable 動作と特に深くネストされたコンテンツを多用しています。

CakePHP フレームワークが深いコンテインの下でクエリを処理する方法が原因で、これが大きなパフォーマンスの問題であることが明らかになりました。1 回のリクエストで、10,000 件を超えるクエリがあり、続いて Cake がデータを 1 つの配列にマージします。

これらの問題が Cake 2.x ブランチで修正されているかどうか、またフレームワークをアップグレードすることでパフォーマンスの問題を改善できるかどうかを確認できますか?

時間の制約があるため、現時点では、システムの一部をアップグレードして Containable を使用しないように書き直すことはできますが、両方を行うことはできません。

他にもメリットがあるのでアップグレードしたいと思いますが、パフォーマンスの問題に確実に対処する必要があります。

深くネストされた包含の例

$this->Event->find('all', array(
        'conditions' => $conditions,
        'contain' => array(
            'SessionDay' => array(
                    'Activity' => array(
                     'TimeSlot' => array(
                        'TimeSlotBooking',
                            'order' => array('slot_time' => 'asc')
                    )
                    )
            ),
            'Activity' => array(
                'TimeSlot' => array(
                    'TimeSlotBooking',
                    'order' => array('slot_time' => 'asc')
                )
            ),
            'Interview' => array(
                'InterviewBooking',
                'order' => array('interview_time' => 'asc')
            ),
            'EventCode'
            )
        )
    );
4

1 に答える 1

0

Cake 2.x のプロジェクトで、非常に深くネストされた包含可能なクエリを使用してきましたが、うまく機能します。

それでも複数のクエリを生成し、場合によっては実行する代わりに

SELECT * FROM table WHERE x IN (1,2,3)

それはするでしょう:

SELECT * FROM table WHERE x = (1)
SELECT * FROM table WHERE x = (2)
SELECT * FROM table WHERE x = (3)

そのため、多くのクエリが発生する可能性があります。結局のところ、すべてのテーブルから実際に取得する必要がある行の数によって異なります。

同じデータベースを使用して、別の Cake 2 プロジェクトを一緒にインストールすることをお勧めします。モデルをすばやくコピーして最大のクエリを実行し、クエリのデバッグ出力で違いを確認してください。

于 2012-12-14T12:11:47.503 に答える