簡體   English   中英

慢查詢-GAE PHP和Cloud SQL

[英]Slow Queries - GAE PHP and Cloud SQL

我有一個調度應用程序,允許用戶使用每周模板批量創建事件。 這是通過將AJAX上的模板課程發布到一個PHP file來完成的,該PHP file接收該模板並將其復制所需的次數。 它一次必須創建的事件數量可能在200-800之間,具體取決於。

我遇到的問題是這些查詢需要很長時間才能完成,這導致網站掛起,有時會在等待所有條目輸入時超時。

一個簡化的例子:

$events = array('valid array of all events and their details');
foreach($events as $event) {
      $query = 'Valid SQL with individual event detaisl';
      mysqli_query($connection, $query);
}

實際上,還會進行更多工作,例如,計算開始和結束時間,將用戶與junction tables相關聯等。這將需要運行200-800次才能為模板產生的每個單獨事件創建一個條目。

我將如何加快速度?

非常感謝任何見識!

更新:我已經嘗試過增加SQL實例的層。 它對所花費的時間沒有任何影響。

需要考慮的一些建議:

  1. 每個單個請求創建200-800個新數據庫條目聽起來有點多余。 通過不立即創建所有事件,而是僅保存設置,使您可以使用一些返回單個事件的代碼來生成800個條目的方式,可以顯着改善和優化應用程序的邏輯以及所使用的數據模型/結構的邏輯。如果需要的話,並在以后添加或更改任何自定義(不是來自模板)信息的情況下分別保存。 這可能需要對代碼進行大量更改,並且可能值得(也可能不值得)(在時間上而不是速度上肯定會有所改善)。

  2. 如評論中已經提到的那樣,可以將其納入一個單獨的任務中,並向用戶提供一些UI反饋,說正在創建事件,然后再有另一個通知說已經完成了。

  3. 通過查看您的代碼,看起來(在我對PHP / mysql不太熟悉)創建800個事件時,您還需要分別與數據庫聯系800次(每次都等待完成響應)。 假設瓶頸存在於這些多重連接中,那么通過串聯生成的查詢並將它們立即饋送到數據庫中,就可以潛在地提高性能。 請參見下面的示例(請注意,在每個生成的查詢末尾都需要使用分號,並且mysqli_multi_query函數允許一次發送多個查詢):

    $events = array('valid array of all events and their details'); $query = ""; foreach($events as $event) { $query .= 'Valid SQL with individual event detaisl;\\n'; } mysqli_multi_query($connection, $query);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM